2012-03-13 62 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流組合。