如果你是一位网络应用开发者,你在开发过程中肯定会使用到网络协议分析器(network protocol analyzer), 我们也可以称之为“嗅探器”。eEye 公司有一款很不错的网络协议分析器产品 “Iris”, 我一直使用它的 4.07 版本,由于其功能完备,一直没有太多的关注其他同类软件,但此版本不能工作在 Windows Vista 上,也不能对无线网络适配器进行分析,而我恰好要在 Vista 上做很多开发工作,又经常使用无线网络连接的笔记本电脑,Iris 4.07 无法满足我的工作需求了。
幸运的是,Wireshark(线鲨)一款基于 winpcap/tcpdump 的开源网络协议分析软件对vista和无线网络的兼容都很好。他的前身就是Ethereal。他具备了和 Iris 同样强大的 Decode 能力,甚至线性截包的能力超过 iris。要用好分析器很重要的一点就是设置好 Filter(过滤器),在这一点上 Wireshark 的过滤表达式更显强大。
我们来看个几个简单的过滤器例子:
“ip.dst==211.244.254.1” (所有目标地址是211.244.254.1的ip包)
“tcp.port==80″ (所有tcp端口是80的包)
你可以把上述表达式用 and 连接起来
“(ip.dst==211.244.254.1) and (tcp.port==80)”
或者再稍加变换
“(ip.dst==211.244.254.1) and !(tcp.port==80)” (所有目的ip是211.244.254.1非 80 端口)
使用表达式设置过滤器比之在界面上选择/填空更加快捷灵活,如果你不熟悉这些表达式,Wireshark 也提供了设置界面,并且最终生成表达式,这样也方便了使用者学习。
Wireshark 还提供了更高级的表达式特性,请看如下表达式
(tcp.port==80) and (ip.dst==211.244.254.1) and (http[5:2]==7075)
对象 http 就是 wireshark 解码以后的 http 数据部分 http[5:2] 就是指从 下标 5 开始的两个字节,请思考一下这样的http 请求
GET /pu*****
怎么样,如果你在浏览器中访问 http://www.google.com/pu 或者 http://www.google.com/put 或者 http://www.google.com/pub 都会被记录下来,匹配 *****pu***… 了
这样我们就可以方便的将我们需要检测的某个特别的网络指令过滤出来。
比如我在帮某硬件编写上位机程序的时候,指令总是以固定格式发送的,很容易我们就能过滤掉烦人的无用的信息,大大的提升了工作效率。
转自cp62的专栏,http://blog.csdn.net/cp62/archive/2008/12/25/3603372.aspx