2010-10-25 70 views
3

我一直在编写一个简单的嗅探器工具。我开始使用libpcap,但后来意识到跟踪TCP流信息会很有用,所以我开始阅读并尝试使用libnids。使用libnids捕获和组装TCP流

这是一个很好的工具,但是如果它没有见证某个流的TCP握手(SYN,SYN/ACK,ACK),它不会在其内部散列表中创建新记录。因此,除非在握手之前启动嗅探器,否则我将无法看到大量数据。文件有点欠缺。有谁知道是否有可能解决这个限制?

+0

嗨Caleb,我使用pynids从pcaps和网络流量抓取流。我遇到了pynids/libnids无法看到包含半开放流的pcap的tcp流的情况。我认为这是固定在libnids 1.21,但显然不是。 35 35 012 012 012 012请详细说明如何在tcp回调从未被触发的情况下触发连接? – fimz 2011-05-10 22:39:31

+0

嗨fimz,FYI我认为堆栈溢出鼓励提出一个新的问题,而不是这个。如果a。)TCP握手被证实,则TCP回调将仅被调用。b)数据是在您指定要在(a)中跟踪的TCP连接发送的,或c。)您指定跟踪的TCP连接已关闭在一个)。我发现你可以使用tcpkill来断开你想让libnids获取的连接 - 所以如果你知道你想要杀死什么连接,配置tcpkill来杀死它,并且连接应该重新握手,并且从那时起NIDS将会选择它起来。我使用了dsniff – 2011-05-11 04:18:01

+1

附带的tcpkill,实际上,最新的libnids带有一个非常好的补丁,可以让您跟踪未建立的TCP连接。你必须应用它并自己编译它。我认为这将是更好的解决方案 – 2011-05-11 04:19:44

回答

3

好的,所以经过一番深入的谷歌搜索后,我想我已经知道了,对于任何可能感兴趣的人来说。

libnids被设计为模拟Linux内核的网络堆栈,因此从这个角度来看,它没有意义为没有握手的流量创建表。唯一的解决方案是使用像tcpkill这样的东西强制进行新的握手。