久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

linux - libpcap抓包結(jié)果不完整?

瀏覽:144日期:2024-07-03 18:58:02

問題描述

在ubuntu14.04下使用libpcap抓包,我想得到一段使用http傳輸?shù)膆tml,但是得到的結(jié)果和同樣情況下wireshark獲得的數(shù)據(jù)不一致。

目前代碼如下:

#include <pcap.h>#include <time.h>#include <stdlib.h>#include <stdio.h>#include <linux/if_ether.h>#include <linux/ip.h>#include <linux/tcp.h>#include <string.h>#include <netinet/in.h>void getPacket(u_char * arg, const struct pcap_pkthdr * pkthdr, const u_char * packet){ bpf_u_int32 caplen = pkthdr->caplen; bpf_u_int32 len = pkthdr->len; int * id = (int *)arg; struct iphdr *ip_header = (struct iphdr *)(packet + ETH_HLEN); struct tcphdr *tcp_header = (struct tcphdr *)(packet + ETH_HLEN + sizeof(struct iphdr)); const u_char *tcp_data = packet + ETH_HLEN + sizeof(struct iphdr) + sizeof(struct tcphdr); printf('%snn', tcp_data);}int main(){ char errBuf[PCAP_ERRBUF_SIZE]; pcap_t * device = pcap_open_live('wlan0', 65535, 1, 0, errBuf); if(!device) {printf('錯誤: pcap_open_live(): %sn', errBuf);exit(1); } struct bpf_program filter; pcap_compile(device, &filter, 'tcp port 80 and host 123.206.7.47', 1, 0); pcap_setfilter(device, &filter); int id = 0; pcap_loop(device, -1, getPacket, (u_char*)&id); pcap_close(device); return 0;}

服務(wù)器有一個簡單的html,我用瀏覽器訪問服務(wù)器http://123.206.7.47/test.html時,wireshark(同樣bpf)抓到這樣10個數(shù)據(jù)包:

linux - libpcap抓包結(jié)果不完整?

我的程序使用調(diào)試器看到的卻是這樣的,這個圖對應(yīng)上圖第四個數(shù)據(jù)包(大小為474):

linux - libpcap抓包結(jié)果不完整?

為什么unsigned char * packet出現(xiàn)incomplete sequence?還有為什么tcp_data這么短?

是我代碼里libpcap少了什么配置還是其他的原因?

還有一點補充是我訪問其他網(wǎng)站時,偶爾能捕捉到完整的HTTP請求,但是在我訪問的那個網(wǎng)頁上就不行。

問題解答

回答1:

已經(jīng)解決了。直接按caplen讀char就行了,printf('%s')輸出不全似乎是因為某個二進制數(shù)據(jù)是0被截斷。

相關(guān)文章:
主站蜘蛛池模板: 辉南县| 平舆县| 磴口县| 海门市| 故城县| 武宣县| 南宫市| 石渠县| 淮南市| 建瓯市| 祁门县| 民和| 岢岚县| 天水市| 肥城市| 略阳县| 庆城县| 云龙县| 凤山市| 桂林市| 青川县| 连云港市| 凤翔县| 阳谷县| 万州区| 乐东| 洞头县| 大港区| 年辖:市辖区| 长汀县| 林口县| 登封市| 台东市| 凉山| 丰台区| 迭部县| 贵定县| 滁州市| 枣庄市| 贞丰县| 棋牌|