2012-03-13 58 views

回答

0

是有可能

的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 
+0

感谢您的回复,我想在sniffex.c程序中存储我的网络的嗅探IP地址及其TCP连接。 – 2012-03-13 10:43:24

+0

首先打印功能 然后过滤 然后导出到文件;) – F3rr31r4 2012-03-13 11:35:54

0

的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流组合。