我想知道是否有办法分割每个频道仅包含 IRC 的 pcap。我正在尝试使用现有 IDS(suricata、snort)比较频道中僵尸网络检测的准确性。检查检测到哪个 IRC 频道的唯一方法似乎是按 IRC 频道分割 pcap,然后尝试分别分析每个 pcap。有没有办法在tcpdump
任何其他工具中执行此操作?
多谢!
答案1
这应该非常简单,因为每个信息(RFC 2812, 3.3;RFC 1459, 2.3) 和渠道运营(RFC 2812, 3.2;RFC 1459, 4.2) 中包含通道名称,两个方向均如此:
客户端消息到频道:
PRIVMSG #channel :Hello!
来自频道的服务器消息:
:[email protected] PRIVMSG #channel :Hello!
通道相关操作命令示例,往返于服务器:
JOIN #channel :[email protected] JOIN #channel MODE #channel +ts :[email protected] MODE #channel +ts TOPIC #test :new topic :[email protected] TOPIC #test :new topic
当然你必须做一个正则表达式如果它位于消息、主题等内部,则不计算频道名称。我认为可以使用字符:
作为分隔符,如下所示:
/^(:|)[^:]*(PRIVMSG|JOIN|PART|MODE|TOPIC) #channel( |$)/gm
^(:|)
允许将可选字符:
作为来自服务器的消息的第一个字符[^:]*
禁用下一个之后的所有查找:
(PRIVMSG|JOIN|PART|MODE|TOPIC)
您正在寻找的命令列表 – 按要求完成!#channel
频道名称( |$)
尾部空间或行结束(我们不想匹配#channelfoo
)- 旗帜
/gm
全球的和多行
这应该有效在您的用例中:它可能在边界情况下失败,并且实际上并不是一个完整的 IRC 协议解析器。