pcap檔案格式是bpf保存原始資料包的格式,很多軟體都在使用,比如tcpdump、wireshark等等,
瞭解pcap格式可以加深對原始資料包的瞭解,自己也可以手工構造任意的資料包進行測試。
瞭解pcap格式可以加深對原始資料包的瞭解,自己也可以手工構造任意的資料包進行測試。
pcap檔的格式為:
檔頭 24位元組
資料包頭 + 資料包 資料包頭為16位元組,後面緊跟資料包
資料包頭 + 資料包 ……
檔頭 24位元組
資料包頭 + 資料包 資料包頭為16位元組,後面緊跟資料包
資料包頭 + 資料包 ……
pcap.h裡定義了檔頭的格式
struct pcap_file_header {
bpf_u_int32 magic;
u_short version_major;
u_short version_minor;
bpf_int32 thiszone; /* gmt to local correction */
bpf_u_int32 sigfigs; /* accuracy of timestamps */
bpf_u_int32 snaplen; /* max length saved portion of each pkt */
bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */
};
struct pcap_file_header {
bpf_u_int32 magic;
u_short version_major;
u_short version_minor;
bpf_int32 thiszone; /* gmt to local correction */
bpf_u_int32 sigfigs; /* accuracy of timestamps */
bpf_u_int32 snaplen; /* max length saved portion of each pkt */
bpf_u_int32 linktype; /* data link type (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
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
| magic
|major | minor | thiszone
| sigfigs | snaplen | linktype |
| d4 c3 b2 a1 | 02 00 | 04 00 | 00 00 00 00 | 00 00 00 00 | ff ff 00 00 | 01 00 00 00 |
| d4 c3 b2 a1 | 02 00 | 04 00 | 00 00 00 00 | 00 00 00 00 | ff ff 00 00 | 01 00 00 00 |
資料包頭的格式
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
struct timeval {
long tv_sec; /* seconds (XXX should be time_t) */
suseconds_t tv_usec; /* and microseconds */
};
ts: 8位元組 抓包時間 4位元組表示秒數,4位元組表示微秒數
caplen:4位元組 保存下來的包長度(最多是snaplen,比如68位元組)
len: 4位元組 資料包的真實長度,如果檔中保存的不是完整資料包,可能比caplen大
struct pcap_pkthdr {
struct timeval ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
struct timeval {
long tv_sec; /* seconds (XXX should be time_t) */
suseconds_t tv_usec; /* and microseconds */
};
ts: 8位元組 抓包時間 4位元組表示秒數,4位元組表示微秒數
caplen:4位元組 保存下來的包長度(最多是snaplen,比如68位元組)
len: 4位元組 資料包的真實長度,如果檔中保存的不是完整資料包,可能比caplen大
瞭解了pcap檔案格式,就可以自己手工構造任意資料包了,可以以錄好的包為基礎,
用十六進位編輯器打開進行修改。
沒有留言:
張貼留言