|
说到嗅探必须要讲到所支持的环境,并非只能对本机或者HUB环境才能使用。对于交换机,你可以指定一个口为嗅探口,从这个口能拿到所有端口的数据。如果这个交换是核心交换,那么你所能取到数据将更多。(三层交换一般都可以指定嗅探口)3 d I: Q: H& h! {; z) ~
1、如果你已经是个python爱好者你机器一定有了python的运行环境,如果你没有可以到www.python.org去下载一个。我使用的还是python 2.3。: X# K. A; h' I. _
2、这段程序需要pcap模块支持,你可以到http://monkey.org/~dugsong/pypcap/去下载一个,它有unix和win两个版本,请注意,win下他需要winpcap支持,如果你没有这个,请再下载winpcap。同样,如果你是在unix下使用,请下载libpcap。
, m. j( T0 }/ q3、安装pcap没有太多说的,win下是个exe,直接运行。unix下直接make就可以了。
: h. @+ V; A/ K# X) s5 s5 u6 R4、打开你的记事本,将以下代码保存在sniffer-QQ.py这个文件中。2 r9 i. j! V! f, V8 I: i
3 L) r- X3 C# _; r% O% R& Q# e- X+ T1 \8 a$ Z
# -*- coding: cp936 -*-+ j& j+ S! N @
import pcap ,struct3 }/ e& u+ Z2 P4 S* u6 w
' m3 v$ u9 y# D3 m3 j: ?# D
pack=pcap.pcap()
0 U" a4 z; @7 q8 \" \6 wpack.setfilter('udp')
) B8 f: W3 e3 z1 V8 f* I( mkey=''
- i- v; u( ~$ D" b" f# z! Y! V* ofor recv_time,recv_data in pack: - g" [. E7 `* P% r3 Z
recv_len=len(recv_data); u# y( S$ f7 w2 }" V7 I
if recv_len == 102 and recv_data[42]== chr(02) and recv_data[101] == chr(03):% e3 P; I7 f: l2 o5 L# ?# Y+ V
print struct.unpack('>I',recv_data[49:53])[0]- y0 s0 H& _# J! ]" n. w
print '登陆了'/ H, B2 S! v6 N% r3 x
elif recv_len == 55:
: w7 P: s! `0 Y print struct.unpack('>I',recv_data[49:53])[0]
) S6 E0 \- r w0 _, H9 y1 g9 F% r print '登陆了'
/ h0 }& C7 \3 ?( v0 w' O/ d! ]: P% i1 \
2 x$ J' ~! j! ~3 j" l% W# O- c% P6 E
如果你在*nix下运行,请将# -*- coding: cp936 -*-更改为# -*- coding: utf-8 -*-
- x0 M7 D( q6 r9 C4 |好了,你可以运行你的python程序了,试着登陆你的QQ。看你的QQ号码是否被抓下来了。, }# F+ C+ N0 A. u t
这里付上我的抓屏结果) x6 K% f; x G6 C
D:\socket-qq>;sniffer-QQ.py. b$ m8 Z# v+ q+ Y0 L
278333853
/ @3 y5 W5 V+ H v12345+ h. V' M) T; ?; V. w9 z
1234567890* k" C0 i6 l; T" `/ @1 P* p
1234567890) G- u5 z4 Y7 J. t* n+ [% E
1234567890
8 `9 p' I7 q6 j( ~9 K2 H278333853
- J9 c" |$ e6 g9 P0 v* t) L8 H1234567890
; v3 F- ?* p& [1234567890
3 K/ B; o; w% D- L0 F4 l278333853
) `# {) U1 J) a. @7 B/ z278333853
! y; j( C' H, L! X7 o5 }7 d0 T% s1 w c, s5 ~ ?
6 `9 M. K& U3 M2 I3 b) C利用的什么原理呢。
( g L& ]+ }& C/ y$ n9 C2 XQQ使用udp协议来和服务器进行通讯,当数据包在传输的时候。udp报文被抓了下来。而登陆包是以0x02开头0x03为结尾的,我们先判断是否为正确的登陆包,当然,登陆包的长度都为102个字节。我们取出结构中特定的位置,就是你的QQ号码了。5 }* N" F3 F& Q3 b V7 q0 }! t
% l% ^! b0 ~6 `& @1 E |
|