在拆包的過程中,我們必須要對WireShark截獲的數據包的格式(即.pcap後綴的文件)有很清楚的瞭解,所以就把今天所學記錄下來,以饗後來者。
一、結構體說明
struct pcap_file_header {
bpf_u_int32 magic;
u_short version_major;
u_short version_minor;
bpf_int32 thiszone;
bpf_u_int32 sigfigs;
bpf_u_int32 snaplen;
bpf_u_int32 linktype;
};
magic: 4字節 pcap文件標識 目前爲“d4 c3 b2 a1”
major: 2字節主版本號 #define PCAP_VERSION_MAJOR 2
minor: 2字節次版本號 #define PCAP_VERSION_MINOR 4
thiszone:4字節時區修正 並未使用,目前全爲0
sigfigs: 4字節精確時間戳 並未使用,目前全爲0
snaplen: 4字節抓包最大長度如果要抓全,設爲0x0000ffff(65535), tcpdump -s 0就是設置這個參數,缺省爲68字節
linktype:4字節鏈路類型 一般都是1:ethernet
struct pcap_pkthdr {
struct timeval ts;
bpf_u_int32 caplen;
bpf_u_int32 len;
};
struct timeval {
long tv_sec;
suseconds_t tv_usec;
};
ts: 8字節 抓包時間 4字節表示秒數,4字節表示微秒數
caplen:4字節 保存下來的包長度(最多是snaplen,比如68字節)
len: 4字節數據報的真實長度,如果文件中保存的不是完整數據包,可能比caplen大。
Pcap文件頭24B各字段說明:
1 Ethernet, and Linux loopback devices
6 802.5 Token Ring
7 ARCnet
8 SLIP
9 PPP
10 FDDI
100 LLC/SNAP-encapsulated ATM
101 “raw IP”, with no link
102 BSD/OS SLIP
103 BSD/OS PPP
104 Cisco HDLC
105 802.11
108 later OpenBSD loopback devices (with the AF_value in network byte order)
113 special Linux “cooked” capture
114 LocalTalk
以下(見圖3)是我截獲的數據包,以.pcap後綴保存的,用UE直接打開,可以詳細看到它的內部結構和上面吻合。
圖3 pcap文件部分截圖
注:藍色選中的部分即爲24字節的數據包包頭
我截獲的的以太網幀的第一幀如圖4所示:
圖4 第一幀的內容
對比圖3和數據報頭16字節格式,你會很容易知道Frame 1的92bytes是5C 00 00 00計算出來的。到此爲止,我想各位應該很清楚的瞭解Frame 1在什麼位置,以及.pcap文件的格式了吧。
如有不懂,請留言,希望我們都能多交流,共同進步,體驗計算機之美。