使用libpcap嗅探数据包后,我想在我的网络中存储IP地址(连接)列表,并且希望存储其每个连接的TCP状态转换。使用TCP状态转换在我的网络中存储IP地址列表
是否有可能使用链表?如果是这样,怎么样?
使用libpcap嗅探数据包后,我想在我的网络中存储IP地址(连接)列表,并且希望存储其每个连接的TCP状态转换。使用TCP状态转换在我的网络中存储IP地址列表
是否有可能使用链表?如果是这样,怎么样?
是有可能
的libpcap是一个开源的C函数库,让进入混杂模式你的网卡捕获包
知道吗?为知道,我只是记住这些:
- you can developed
- use tcpdump and write a condition to capture and export to a file
- use wireshark and write a condition to capture and export to a file
的snifex.c是一个良好的开端(http://www.tcpdump.org/pcap.html)
在回调函数:
got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet);
指针* ip指向ip头部的开头。
ip = (struct sniff_ip*)(packet + SIZE_ETHERNET);
在那里您可以找到IP地址信息。请注意,您必须将调用分隔为inet_ntoa,因为它似乎使用了静态缓冲区。因此,如果您计划在cmd或文件中显示输出,则应该使用两个printf调用。这就是为什么他们是在单独的行snifex.c:
printf(" From: %s\n", inet_ntoa(ip->ip_src));
printf(" To: %s\n", inet_ntoa(ip->ip_dst));
对于您可以使用TCP指针
tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip);
使用TCP标记的TCP信息TCP-> th_flags找出连接状态,例如tcp->th_flags==TH_SYN
一旦知道了标志,您必须检查RFC793 TCP/IP状态图以确定TCP协议的状态。
就实现而言,您可以为每个4元组(srcIP,dstIP,srcPort,dstPort)使用散列数组,以便具有O(1)(最佳情况)。请注意,在某些情况下,您可能会看到中间流量或半打开的TCP连接等。RFC详细描述了如何处理它们。
最后,如果您不希望实施TCP协议,则可以使用模拟Linux 2.0.x IP栈的Libnids库,提供IP碎片整理和TCP流组合。
感谢您的回复,我想在sniffex.c程序中存储我的网络的嗅探IP地址及其TCP连接。 – 2012-03-13 10:43:24
首先打印功能 然后过滤 然后导出到文件;) – F3rr31r4 2012-03-13 11:35:54