求大神指点啊,报文分析,制作pccap文件的问题

请问一下,现在知道一个报文的十六进制文件,如下图,只知道红色括号内的报文(也就是从以太头一直到payload),要自己制作pcap文件,请问怎么设置pcap文件格式中的,数据头(pcap_pkthdr)中的长度呢?caplen,len

图片说明

经过查阅资料,以及各位的回答,在知道十六进制字符创或二进制数据,可以使用pcap_open_dead();函数

                        dump_p = pcap_open_dead(DLT_EN10MB, 65535);

根据需要的类型进行设置,然后

                        dump_t_p = pcap_dump_open(dump_p, FileName);

打开要写入的文件,获得文件句柄(类似)

                        pcap_dump((u_char*)dump_t_p, &Gq_pcap_pkthdr, (u_char*)Binbuf);
然后将获得数据转换成二进制存储Binbuf中,全部交给pcap_dump进行处理写入文件即可
                        pcap_dump_close(dump_t_p);

最后在关闭文件即可。
设置数据包头的时候,可以先不考虑时间,将时间戳都设置成0即可,长度根据你获得的数据包长度进行设置,字节为单位。

http://blog.sina.com.cn/s/blog_94d26ea60100w3kt.html

timeval后面就是

另参考

http://blog.csdn.net/yhangleo/article/details/8484597

http://wenku.baidu.com/link?url=wVaeN-pq4-hti5-vwIGYVgFHL85k251JSbaBwBGq9DIXsu0a0PeYQRCQ0ivL6y7GNkzgkEuz8ahZLW6uqqjus5xsaPddF0lUKEiwm8fxV-3

libpcap捕获时,使用pcap_loop之类的函数,在调用处理的handle的时候,返回的第一个参数的类型为pcap_pkthdr,第二个参数为uint8_t的指针,前者中有两个数据域的东东:caplen和len,如下:

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) */
};

ts:时间戳
cpalen:当前分组的长度
len:数据包的长度

1 楼snakebite2008(3DFX) 回复于 2005-06-29 11:42:32 得分 20
caplen——真正实际捕获的包的长度
len——这个包的长度

因为在某些情况下你不能保证捕获的包是完整的,例如一个包长1480,但是你捕获到1000的时候,可能因为某些原因就中止捕获了,所以caplen是记录实际捕获的包长,也就是1000,而len就是1480。