免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7925 | 回复: 7
打印 上一主题 下一主题

[函数] tcpdump输出的时间格式(21:14:07.276319)是怎么取出来的 [复制链接]

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-16 20:30 |只看该作者 |倒序浏览
5可用积分
如题,有没有范例代码?

最佳答案

查看完整内容

pcap文件的格式为: 文件头 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 snaple ...

论坛徽章:
0
2 [报告]
发表于 2009-07-16 20:30 |只看该作者

回复 #4 yjh777 的帖子

pcap文件的格式为:
  文件头    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_*) */
};
看一下各字段的含义:
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 |

数据包头的格式
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大

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
3 [报告]
发表于 2009-07-16 20:57 |只看该作者

回复 #1 yjh777 的帖子

找到了,自问自答吧:
        struct timeval tp;
        struct tm *timep = NULL;
        if (gettimeofday(&tp, NULL)) {
            perror("gettimeofday() failed");
        }
        timep = localtime(&(tp.tv_sec));
        if (NULL != timep) {
            fprintf(fp, "{%s}[%d:%d:%d.%lu]\n", str,
                    timep->tm_hour, timep->tm_min, timep->tm_sec, tp.tv_usec);
        }

论坛徽章:
0
4 [报告]
发表于 2009-07-17 09:53 |只看该作者

回复 #2 yjh777 的帖子

晚了一步。

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
5 [报告]
发表于 2009-07-17 12:26 |只看该作者
原帖由 ziggler 于 2009-7-17 09:53 发表
晚了一步。


那再加一个问题: tcpdump -w file 写文件的格式是什么样的? 除了报文内容还有哪些信息?
(我想把模块里收到的报文DEBUG时按tcpdump标准格式记录到文件里,然后用tcpdump -r解析读出来,省得自己写解析了)

论坛徽章:
0
6 [报告]
发表于 2009-07-17 13:02 |只看该作者

回复 #4 yjh777 的帖子

真逗

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
7 [报告]
发表于 2009-07-17 16:21 |只看该作者
我按格式写入数据

可是tcpdump -r mydumpfile看的时候,报错说我伪造文件头

tcpdump: pcap_loop: bogus savefile header

怎么回事啊?

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
8 [报告]
发表于 2009-07-17 16:56 |只看该作者

回复 #7 yjh777 的帖子

明白了,
偶自作聪明把报文头里的时间长度等信息转成网络字节序了(因为我觉得这样就跨平台了),去掉蛇足就好了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP