Netexpert FAQ 网络分析专家学习建议入口 @netexpert成员申请指南
网络分析时代 netexpert积分规则的说明 Netis招贤纳士(2007年12月2日更新)
发新话题
打印

用Wireshark打开.dat文件开发

用Wireshark打开.dat文件开发

.dat文件中是基于(指示其中一种可能Etherne+udp+snmp)的若干数据包,想用Wireshark打开,应该从可做起呢??

自己的思路:

Wireshark默认的文件格式是.cap:头文件的24字节可以加载.dat文件前,但是每个包头的16字节的确让我为难啊,总不能每个包一一添加吧???况且.dat文件中每个包的长度也未知......

想看看源码,开发Wireshark中有关文件的打开类型,大家指点指点啊!!!给点思路.....

先谢过拉^_^
本帖最近评分记录
  • Vader 威望 +5 2008-6-6 19:41

TOP

Wireshark支持多种输入格式,不过我没深入研究过。只对libpcap格式(.cap)比较熟悉,你想转换成pcap格式,只能挨个添加16字节包头:(

另:如果你的.dat文件中不知道每个包的长度,还要自己从IP头中读入数据包长度,万一遇到Ethernet协议不是IP(0x0008)的,处理起来更加麻烦。


如果你想重组成pcap格式文件,首先按照这个结构写入一个24字节包头:
typedef struct pcap_hdr_s {
        guint32 magic_number;   /* magic number */
        guint16 version_major;  /* major version number */
        guint16 version_minor;  /* minor version number */
        gint32  thiszone;       /* GMT to local correction */
        guint32 sigfigs;        /* accuracy of timestamps */
        guint32 snaplen;        /* max length of captured packets, in octets */
        guint32 network;        /* data link type */
} pcap_hdr_t;

然后是16字节的包描述(注意后面的说明):
typedef struct pcaprec_hdr_s {
        guint32 ts_sec;         /* timestamp seconds */                                               抓包的时间,可以填0
        guint32 ts_usec;        /* timestamp microseconds */                                      毫秒数,直接以0填充
        guint32 incl_len;       /* number of octets of packet saved in file */                文件中的包长,就是(Etherne+udp+snmp)的总长度了
        guint32 orig_len;       /* actual length of packet */                                         原始包长,和上面长度相同
} pcaprec_hdr_t;

构造好的就是这个然后加入数据包的信息,如此循环...

填充的结果类似这种:
00000000   D4 C3 B2 A1 02 00 04 00  00 00 00 00 00 00 00 00
00000010   60 00 00 00 01 00 00 00  00 00 00 00 00 00 00 00
00000020   3E 00 00 00 3E 00 00 00 <你的数据包内容,长度62(0x3E)字节>
然后用Wireshark打开就可以看到数据包了。

[ 本帖最后由 grsgrs 于 2008-6-6 17:48 编辑 ]
本帖最近评分记录
  • Vader 威望 +15 精彩回复帮助其他会员 2008-6-6 19:41
对不起,因为你的签名过于华丽而被系统屏蔽!
请更换更加朴素的再试。

TOP

包长=读入IP总长度+18字节的Ethernet首部  我是这么想的

如果在Wireshark下想写个打开.dat文件的程序  该从啥地方入手呢

我已编译通了Wireshark的源代码  处理文件类型的目录下wiretap有很多文件  我看过libcap.c 处理打开.cap文件的  感觉代码太长拉 看的晕乎

能否推荐种合适的学习过程,比如看个简单的例程 打开简单的文件类型  总之易于上手的

希望看过这部分的人给指个路  

再次感谢楼上好友  希望多多交流  共同进步!

TOP

包长=IP头长度+14(不是18)

tcpdump的ether.h中是这样定义的:
/*
* Structure of a DEC/Intel/Xerox or 802.3 Ethernet header.
*/
struct        ether_header {
        u_int8_t        ether_dhost[ETHER_ADDR_LEN];                                      // 6
        u_int8_t        ether_shost[ETHER_ADDR_LEN];                                      // 6
        u_int16_t        ether_type;                                                                       // 2
};

/*
* Length of a DEC/Intel/Xerox or 802.3 Ethernet header; note that some
* compilers may pad "struct ether_header" to a multiple of 4 bytes,
* for example, so "sizeof (struct ether_header)" may not give the right
* answer.
*/

#define ETHER_HDRLEN                14


开始时不要研究Wireshark,太多界面和分析部分。建议你读一下tcpdump的源码,抓包原理上差不多。
读入.dat格式你还是自己另外先写个程序吧,调试起来也方便。外部可以读入了,再集成到Wireshark中。

[ 本帖最后由 grsgrs 于 2008-6-10 09:10 编辑 ]
对不起,因为你的签名过于华丽而被系统屏蔽!
请更换更加朴素的再试。

TOP

怎么添加文件头和包头呢 难道手工添加吗  
看了少的相关东东 都是调用函数读取*.cap文件 可是真正处理文件的代码好难找啊!

请大侠指路 谢谢^_^

TOP

网上例子都是利用pcap.h中的函数读取的,我当时也为这个摸索了很久。

文件头与包描述的16字节,当然要自己一点点的写进去,没有现成函数供你调用的。直接读取就是按照二楼的思路(跳过包头24字节,然后读入包描述、内容...),实在没什么可讲的。
如果你想看代码,这个就是了:

Delphi的那个有两个功能,一个是为压缩数据而精简每个包到48字节,另一个是合并两个cap文件。
C++版的是我一个Linux系统,libpcapReader.cpp就是读入数据包的部分了。重点看GenPeerFromFile()函数,输入一个cap文件名,调用PacketAnalysis()分析数据包。
附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
  • scz 威望 +15 帮助其他会员 2008-6-20 09:11
对不起,因为你的签名过于华丽而被系统屏蔽!
请更换更加朴素的再试。

TOP

发新话题
版块跳转