Как разделить pcap по каналам IRC

Интересно, есть ли способ разделить pcap, содержащий (только) IRC по каналам. Я пытаюсь сравнить точность обнаружения ботнета в каналах с использованием существующих IDS (suricata, snort). Единственный способ проверить, какой канал IRC был обнаружен, - это разделить pcap на каналы IRC и попытаться проанализировать каждый pcap отдельно. Есть ли способ сделать это с помощью tcpdump или любого другого инструмента?

Большое спасибо!

1
задан 18 July 2020 в 16:22
1 ответ

Это должно быть довольно просто, так как каждое сообщение (RFC 2812, 3.3; RFC 1459, 2.3) и операция канала (RFC 2812, 3.2; RFC 1459, 4.2) содержит имя канала в обоих направлениях:

  • Сообщение клиента на канал:

     PRIVMSG #channel :Hello !
     
  • Сообщение сервера от канала:

     (скрыто) PRIVMSG #channel :Hello!
     
  • Примеры команд операций, связанных с каналом, на сервер и с сервера:

     JOIN #channel
    (скрыто) ПРИСОЕДИНЯЙТЕСЬ к #каналу
    РЕЖИМ #канал +ts
    (скрыто) РЕЖИМ #channel +ts
    ТЕМА #test :новая тема
    (скрыто) ТЕМА #test :новая тема
     

Конечно, вы должны создать регулярное выражение, которое не считает имя канала, если оно находится внутри сообщения, темы и т. д. Я думаю, было бы нормально использовать : символ в качестве разделителя, например:

/^(:|)[^:]*(PRIVMSG|JOIN|PART|MODE|TOPIC) #channel( |$)/gm
  • ^(:|) позволяет использовать необязательный : в качестве первого символа для сообщений с сервера
  • [^:]* отключает весь поиск после следующего :
  • (PRIVMSG|JOIN|PART|MODE|TOPIC) список команд, которые вы ищете – полный как требуется!
  • #channel имя канала
  • ( |$)конечный пробел или конец строки (мы не хотим совпадать с #channelfoo)
  • флаги /gm для глобальных и многострочных

Это должно работать в вашем случае использования: это может привести к сбою в границе случаях и на самом деле не является полным парсером протокола IRC.

1
ответ дан 18 July 2020 в 14:24

Теги

Похожие вопросы