Назад | Перейти на главную страницу

Как разделить pcap на IRC каналы

Интересно, есть ли способ разделить 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.