sinat_30329511
hair_man
采纳率51.6%
2015-08-12 04:47

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

1
已采纳

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

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • sinat_30329511 hair_man 6年前

    经过查阅资料,以及各位的回答,在知道十六进制字符创或二进制数据,可以使用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即可,长度根据你获得的数据包长度进行设置,字节为单位。

    点赞 评论 复制链接分享
  • oyljerry oyljerry 6年前

    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。

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 6年前

相关推荐