|
说到嗅探必须要讲到所支持的环境,并非只能对本机或者HUB环境才能使用。对于交换机,你可以指定一个口为嗅探口,从这个口能拿到所有端口的数据。如果这个交换是核心交换,那么你所能取到数据将更多。(三层交换一般都可以指定嗅探口)
1 B) K O9 W% g @. I2 S9 \! B1、如果你已经是个python爱好者你机器一定有了python的运行环境,如果你没有可以到www.python.org去下载一个。我使用的还是python 2.3。3 d) Q, R2 |3 s* {9 e
2、这段程序需要pcap模块支持,你可以到http://monkey.org/~dugsong/pypcap/去下载一个,它有unix和win两个版本,请注意,win下他需要winpcap支持,如果你没有这个,请再下载winpcap。同样,如果你是在unix下使用,请下载libpcap。
/ V8 a6 [, \6 W3、安装pcap没有太多说的,win下是个exe,直接运行。unix下直接make就可以了。
6 e+ Y; r) ^. v5 \$ W V: O4、打开你的记事本,将以下代码保存在sniffer-QQ.py这个文件中。4 z2 l7 V. I/ C3 X Y
) ] j' J U* A) _) k: e/ j* o$ Q/ G$ ?
8 @/ l- `# P( U6 X# -*- coding: cp936 -*-; r G) |) v1 c" S4 F+ c9 v* B
import pcap ,struct
$ _1 c, F# X) P% L/ ?& |5 ~' v% h7 U/ i1 {; X8 f A" Z
pack=pcap.pcap() 1 P# L# H3 a! l
pack.setfilter('udp')" l H$ ?9 i) T' t" e$ t4 J+ ?) T
key=''
2 K0 v2 F( l* Cfor recv_time,recv_data in pack:
8 b- ^+ R$ b$ Z5 v+ ` recv_len=len(recv_data)' @3 k0 ~4 O Y8 `. C
if recv_len == 102 and recv_data[42]== chr(02) and recv_data[101] == chr(03):3 q7 q p! V6 F) b7 f! y
print struct.unpack('>I',recv_data[49:53])[0]
6 h6 g0 p3 u4 |8 [ print '登陆了'2 ~1 z" |3 [' U, u% J
elif recv_len == 55:' k! G( ]0 b! k1 M, k0 J) @
print struct.unpack('>I',recv_data[49:53])[0]
0 k" Z1 d5 }" }" x' f$ ] print '登陆了'
: I: q7 m; s" K1 G
7 ?0 d! T I3 Z) F- m- Q) S( X; A
如果你在*nix下运行,请将# -*- coding: cp936 -*-更改为# -*- coding: utf-8 -*-
9 W1 O# E9 M3 t好了,你可以运行你的python程序了,试着登陆你的QQ。看你的QQ号码是否被抓下来了。
: b5 V1 U6 w) `9 G% I% d这里付上我的抓屏结果! m" F+ S! ^" X+ M
D:\socket-qq>;sniffer-QQ.py
) ]* u; G% x# w& s2783338533 h. w/ L- U3 ]7 Q7 t! P
123450 O. P5 s9 t" n3 Z$ j
12345678907 w% w% @% w) l& q* X3 M
1234567890
. }, y/ i/ F$ d) h$ R1234567890
, x" m- r! }# A7 [! t: ]278333853
6 s# T- v5 M5 t: h, Q1234567890
& x" t% h" o! ^0 q& g0 M7 H9 ~# x2 a1234567890
; u# L6 P. T! n; E' n0 ~# f3 c278333853
. u$ i4 W) n: `$ Z+ Q9 z1 c278333853
6 b" f9 }. K4 N/ |8 J& g7 P9 m7 a! i, j% ^1 Y% {
1 e; C. \% U! a+ n3 z
利用的什么原理呢。
7 s1 C8 t) F, A% a) ?QQ使用udp协议来和服务器进行通讯,当数据包在传输的时候。udp报文被抓了下来。而登陆包是以0x02开头0x03为结尾的,我们先判断是否为正确的登陆包,当然,登陆包的长度都为102个字节。我们取出结构中特定的位置,就是你的QQ号码了。
+ C$ T4 B3 M" _* T7 X- {' H
! G: Q5 }+ e% T4 \+ d0 ~ |
|