Интересно, есть ли способ разделить pcap, содержащий (только) IRC на каналы. Я пытаюсь сравнить точность обнаружения ботнета в каналах с использованием существующих IDS (suricata, snort). Единственный способ проверить, какой канал IRC был обнаружен, - это разделить pcap на каналы IRC и попытаться проанализировать каждый pcap отдельно. Есть ли способ сделать это в tcpdump
или любой другой инструмент?
Большое спасибо!
Это должно быть довольно просто, поскольку каждый сообщение (RFC 2812, 3.3; RFC 1459, 2.3) и работа канала (RFC 2812, 3.2; RFC 1459, 4.2) содержит название канала в обоих направлениях:
Сообщение клиента на канал:
PRIVMSG #channel :Hello!
Сообщение сервера из канала:
:nick!user@host.example.com PRIVMSG #channel :Hello!
Примеры команд операций, связанных с каналом, на сервер и с сервера:
JOIN #channel
:nick!user@host.example.com JOIN #channel
MODE #channel +ts
:nick!user@host.example.com MODE #channel +ts
TOPIC #test :new topic
:nick!user@host.example.com TOPIC #test :new topic
Конечно, вам нужно сделать регулярное выражение который не учитывает имя канала, если он находится внутри сообщения, темы и т. д. Я думаю, было бы нормально использовать :
символ в качестве разделителя, например:
/^(:|)[^:]*(PRIVMSG|JOIN|PART|MODE|TOPIC) #channel( |$)/gm
^(:|)
допускает необязательный :
как первый символ для сообщений с сервера[^:]*
отключает поиск после следующего :
(PRIVMSG|JOIN|PART|MODE|TOPIC)
список команд, которые вы ищете - заполните по мере необходимости!#channel
название канала( |$)
хвостохранилище или конец линии (мы не хотим совпадать #channelfoo
)/gm
для Глобальный и многострочныйЭто должно работать в вашем случае использования: он может не работать в пограничных случаях и на самом деле не является полноценным парсером протокола IRC.