Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400216
  • 博文数量: 77
  • 博客积分: 2031
  • 博客等级: 大尉
  • 技术积分: 855
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 19:54
文章分类

全部博文(77)

文章存档

2011年(1)

2009年(52)

2008年(24)

我的朋友

分类: Python/Ruby

2009-03-13 22:29:17

Ethereal 自带许多协议的 decoder,简单,易用,基于winpcap的一个开源的软件.但是它的架构并不灵活,如何你要加入一个自己定义的的解码器,得去修改 Ethereal的代码,再重新编译,很烦琐.对于一般的明文 协议,没有什么问题,但是对于加密协议,比如网络游戏,客户端程序一般会在刚连接上的时候,发送一个随机密钥,而后的报文都会用这个密钥进行加密,如此. 要想破解,得要有一个可编程的抓包器.

libpcap是一个不错的选择,但是对于抓包这样需要反复进行”试 验->修改”这个过程的操作,c 语言显然不是明智的选择.

Python提供了几个libpcapbind,~dugsong/pypcap/这里有 一个最简单的。在windows平台上,你需要先安装winpcap,如果你已经安装了Ethereal非常好用

Google code地址:

>>> import dpkt, pcap
>>> pc = pcap.pcap()
>>> pc.setfilter(’icmp’)
>>> for ts, pkt in pc:
…     print `dpkt.ethernet.Ethernet(pkt)`

Ethernet(src=’\x00\x03G\xb2M\xe4′, dst=’\x00\x03G\x06h\x18′, data=IP(src=’\n\x00\x01\x1c’, dst=’\n\x00\x01\x10′, sum=39799, len=60, p=1, ttl=128, id=35102, data=ICMP(sum=24667, type=8, data=Echo(id=512, seq=60160, data=’abcdefghijklmnopqrstuvwabcdefghi’))))
Ethernet(src=’\x00\x03G\x06h\x18′, dst=’\x00\x03G\xb2M\xe4′, data=IP(src=’\n\x00\x01\x10′, dst=’\n\x00\x01\x1c’, sum=43697, len=60, p=1, ttl=255, id=64227, data=ICMP(sum=26715, data=Echo(id=512, seq=60160, data=’abcdefghijklmnopqrstuvwabcdefghi’))))
^CTraceback (most recent call last):
File ‘’, line 1, in ?
File ‘pcap.pyx’, line 298, in pcap.pcap.__next__
KeyboardInterrupt
>>>
>>> pc.stats()
(4851, 0, 0)

1. pcap还支持一些回调函数的用法,效率比较高,不过抓包不是为了效率,把事情做正确就行
2. 调用pc.setfilter填写filter字符串,libpcap/WinPcap的filter language采用的tcpdump相同的格式,可以去看它的 man page
Ethereal的帮助里面有一个简单的说明

3. 报文的解析,可以用python自带的struct,很容易使用,当然可以安装~dugsong/dpkt/这个包,已经帮你解析基本的报文信息

在Google code的地址:


阅读(8128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~