新聞中心
在Linux下編寫(xiě)網(wǎng)絡(luò)抓包程序,我們通常使用libpcap庫(kù),libpcap是一個(gè)專(zhuān)門(mén)用于數(shù)據(jù)包捕獲的庫(kù),它提供了一套完整的API,可以讓我們方便地對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行抓取、分析等操作。

創(chuàng)新互聯(lián)為企業(yè)提供:品牌網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃、小程序開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)和網(wǎng)站運(yùn)營(yíng)托管,一站式網(wǎng)絡(luò)營(yíng)銷(xiāo)整體服務(wù)。實(shí)現(xiàn)不斷獲取潛在客戶(hù)之核心目標(biāo),建立了企業(yè)專(zhuān)屬的“成都全網(wǎng)營(yíng)銷(xiāo)”,就用不著再為了獲取潛在客戶(hù)而苦惱,相反,客戶(hù)會(huì)主動(dòng)找您,生意就找上門(mén)來(lái)了!
安裝libpcap庫(kù)
在Ubuntu系統(tǒng)中,我們可以通過(guò)以下命令安裝libpcap庫(kù):
sudo apt-get install libpcap-dev
在其他Linux發(fā)行版中,也可以通過(guò)相應(yīng)的包管理器進(jìn)行安裝。
編寫(xiě)網(wǎng)絡(luò)抓包程序
下面是一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)抓包程序,它會(huì)抓取所有的數(shù)據(jù)包,并將它們打印出來(lái):
includeinclude include include void packet_handler(u_char *user_data, const struct pcap_pkthdr *pkthdr, const u_char *packet) { struct ip *iph; struct tcphdr *tcph; int length; iph = (struct ip *)(packet + 14); tcph = (struct tcphdr *)(packet + 14 + iph->ip_hl*4); length = pkthdr->len (iph->ip_hl*4 + tcph->doff*4); printf("Source IP: %s ", inet_ntoa(*(in_addr*)&iph->ip_src)); printf("Destination IP: %s ", inet_ntoa(*(in_addr*)&iph->ip_dst)); printf("Source Port: %d ", ntohs(tcph->source)); printf("Destination Port: %d ", ntohs(tcph->dest)); printf("Length: %d ", length); } int main() { pcap_t *handle; char errbuf[PCAP_ERRBUF_SIZE]; struct pcap_pkthdr header; const u_char *packet; char *dev; struct bpf_program fcode; bpf_u_int32 net; // 打開(kāi)網(wǎng)絡(luò)設(shè)備,這里我們選擇所有設(shè)備("any") handle = pcap_open_live("any", BUFSIZ, 1, 1000, errbuf); if (handle == NULL) { fprintf(stderr,"Couldn't open device: %s ", errbuf); return(2); } // 編譯并應(yīng)用BPF過(guò)濾器,這里我們選擇TCP協(xié)議的數(shù)據(jù)包 if (pcap_compile(handle, &fcode, "tcp", 0, net) == -1) { fprintf(stderr,"Couldn't parse filter %s: %s ", "tcp", pcap_geterr(handle)); return(2); } if (pcap_setfilter(handle, &fcode) == -1) { fprintf(stderr,"Couldn't install filter %s: %s ", "tcp", pcap_geterr(handle)); return(2); } // 開(kāi)始抓包,這里我們只抓取10個(gè)數(shù)據(jù)包 while (1) { packet = pcap_next(handle, &header); printf("Packet size: %d bytes ", header.len); packet_handler(NULL, &header, packet); } }
編譯運(yùn)行網(wǎng)絡(luò)抓包程序
我們可以使用gcc編譯器來(lái)編譯這個(gè)程序:
gcc -o sniffer sniffer.c -lpcap -lnetinet -lnsl -lssl -lcrypto -lz -lpthread -ldl -lm -lpcap-linux-gnu -lresolv-conf -lgnutls-openssl-compat -lgnutls-openssl27-compat -lgnutls-openssl30-compat -lgnutls-openssl31-compat -lgnutls-openssl32-compat -lgnutls-openssl33-compat -lgnutls-openssl34-compat -lgnutls-openssl35-compat -lgnutls-openssl36-compat -lgnutls-openssl37-compat -lgnutls-openssl38-compat -lgnutls-openssl39-compat -lgnutls-openssl40-compat -lgnutls-openssl41-compat -lgnutls-openssl42-compat -lgnutls-openssl43-compat -lgnutls-openssl44-compat -lgnutls-openssl46-compat -lgnutls-openssl47-compat -lgnutls-openssl48-compat -lgnutls-openssl49-compat -lgnutls-openssl50-compat -lgnutls-openssl51-compat -lgnutls-openssl52-compat -lgnutls-openssl53-compat -lgnutls-openssl54-compat -lgnutls-openssl55-compat -lgnutls-openssl56-compat -lgnutls-openssl57-compat -lgnutls-openssl58-compat -lgnutls-openssl59-compat -lgnutls-openssl60-compat -lgnutls-openssl61-compat -lgnutls-openssl62-compat -lgnutls-openssl63-compat -lgnutls-openssl64-compat -lgnutls-openssl65-compat -lgnutls-openssl66-compat -lgnutls-openssl67-compat -lgnutls-openssl68-compat -lgnutls-openssl69-compat -lgnutls-openssl70-compat -lgnutls-openssl71-compat -lgnutls-openssl72-compat -lgnutls
分享題目:Linux下如何編寫(xiě)網(wǎng)絡(luò)抓包程序代碼
鏈接分享:http://m.5511xx.com/article/dpppdcg.html


咨詢(xún)
建站咨詢(xún)
