存档

文章标签 ‘Wireshark’

在 Wireshark 抓包中显示 snmp mib 名

2010年12月9日 845 views 没有评论

Wireshark 是最富盛名的开源抓包工具了,在电信网管开发的日常工作中是不可或缺的,经常需要抓包分析。那有没有办法可以在抓到的包中直接显示 snmp mib 的名字,而不是 OID 呢?办法当然是有的,也很简单,在官方的文档里面就有说明了。这里讲下实际配置步骤:

1. 把 mib 文件放到 “C:\Program Files\Wireshark\snmp\mibs” 目录下。

2. 打开 “%APPDATA%\Wireshark\smi_modules” 文件,在里面按原有的格式,添加mib名字。

3. 修改 Wireshark 的配置,选中 “Enable OID resolution”,”Suppress SMI errors”(如下图)。修改之后关闭再重新打开 Wireshark 就生效了。

配置 Wireshark


注意事项:

1. 如果看到的配置界面跟上面的不一样的话,是 Wireshark 版本太低了,升级到最新的版本即可。

2. 不是所有的 mib 文件都能被正确的解析,这是一个已知问题,因为其用的开源的 mib 解析模块 libsmi 有问题。如果发现加了某几个 mib 之后 Wireshark 就启动不了了,那就还是把改动回退吧。

参考阅读:123


另外,因为要求 mib 文件的名字必须是 mib 模块的名字,但是存在文件名和模块名不一致的情况,写了个 groovy 脚本,对指定目录下的 mib 文件进行重命名:

import java.util.regex.*
def dir = new File('''C:\Program Files\Wireshark\snmp\mibs''')
def pattern = ~/(?ms).*^\s*([\w\-]+)\s*DEFINITIONS ::= BEGIN\s*$.*/
dir.eachFileRecurse{ f ->
	if ( f.file && f.name.endsWith(".mib") ) {
		Matcher m = pattern.matcher( f.getText() );
		if (m.matches()) {
			f.renameTo( f.parentFile.path + "\\" + m[0][1] )
			println '"' + m[0][1] + '"'
		}
	}
}


分类: 技术 标签: ,

[转] Wireshark的Pcap文件格式分析

2009年9月7日 1,937 views 没有评论

转自:http://blog.chinaunix.net/u2/82392/showart_1870732.html

前段时间因工作要求,需要对各种数据包进行分析和操作,内容涉及网路协议分析,socket,文件操作等。在此分享下学习和实践的经验。

首先介绍下网络抓包、协议分析的必备软件Ethereal,新版(Wireshark)以下还以 Ethereal代之,目前最新版本已经支持在无线局域网抓包了。Linux和Windows均有对应安装包,它们分别是gcc和VC++编译的。不过 Windows下是基于Winpcap而Linux下则是Libcap。Ethereal作为网路协议分析、学习、开发的敲门软件,其使用技巧及其原理机 制(BPF)网上都有比较详尽的介绍,当初我收集的相关资料随后也会上传,不再多说。下面主要介绍下Ethereal默认的*.pcap文件保存格式。

Pcap文件头24B各字段说明:

Magic:4B:0x1A 2B 3C 4D:用来标示文件的开始
Major:2B,0×02 00:当前文件主要的版本号
Minor:2B,0×04 00当前文件次要的版本号
ThisZone:4B当地的标准时间;全零
SigFigs:4B时间戳的精度;全零
SnapLen:4B最大的存储长度
LinkType:4B链路类型
常用类型:
0 BSD loopback devices, except for later OpenBSD
1            Ethernet, and Linux loopback devices
6            802.5 Token Ring
7            ARCnet
8            SLIP
9            PPP
10           FDDI
100         LLC/SNAP-encapsulated ATM
101         “raw IP”, with no link
102         BSD/OS SLIP
103         BSD/OS PPP
104         Cisco HDLC
105         802.11
108         later OpenBSD loopback devices (with the AF_value in network byte order)
113         special Linux “cooked” capture
114         LocalTalk
 
Packet 包头和Packet数据组成
字段说明:
Timestamp:时间戳高位,精确到seconds
Timestamp:时间戳低位,精确到microseconds
Caplen:当前数据区的长度,即抓取到的数据帧长度,由此可以得到下一个数据帧的位置。
Len:离线数据长度网络中实际数据帧的长度,一般不大于caplen,多数情况下和Caplen数值相等。
Packet 数据:即 Packet(通常就是链路层的数据帧)具体内容,长度就是Caplen,这个长度的后面,就是当前PCAP文件中存放的下一个Packet数据包,也就 是说:PCAP文件里面并没有规定捕获的Packet数据包之间有什么间隔字符串,下一组数据在文件中的起始位置。我们需要靠第一个Packet包确定。 最后,Packet数据部分的格式其实就是标准的网路协议格式了可以任何网络教材上找得到。
 



========================================================

这里再把pcap文件头的结构定义添上:

typedef unsigned long  DWORD;
typedef unsigned short  WORD;
typedef unsigned char  BYTE;
 
typedef struct PCAP_FILE_HEADER
{
 DWORD magic;
 WORD versionMajor;
 WORD versionMinor;
 DWORD thisZone;
 DWORD sigfigs;
 DWORD snapLen;
 DWORD linkType;
}PcapFileHeader, *PPcapFileHeader;


2011-02-17 补充两篇文章:

1)解析Winpcap截获的数据包

2)以太网帧类型速查表

分类: 技术 标签:

Wireshark hub 下抓不到包问题解决

2009年9月7日 1,446 views 1 条评论

在同一个 hub 下接笔记本和机顶盒(STB),需要在笔记本上抓包查 STB 的问题。

如果不用 capture filter ,能抓到经过 hub 的所有的包,包括 http 的。

因为包太多,想只过滤出 http 的包用于分析,于是加 capture filter 为 “port 80“, 结果一个包都抓不到了。

尝试了各种办法,都没有结果。于是到 Wireshark 的 maillist 发帖求助,很快就有了结果

原来因为所接的 Hub 其实是电信的 Adsl 猫,有四个 RJ45 网口, STB 是通过猫拨号上网的,所以 capture filter 需要用 “pppoes && port 80“,其中的 pppoes 不可少!

从刚开始以为是 Wireshark 的一个 bug,到发帖求助,到得到结果,也就是短短几天的时间。

在这个过程中,对网络方面的知识也有了更多一点的了解。开源社区确实很好很强大,真正的牛人专家很多,参与其中确实能学到很多的知识。


分类: 技术 标签: ,