Linux系统下Sniffit的安装与使用方法
Sniffit是由Lawrence Berkeley Laboratory开发的,可以在Linux、Solaris、SGI等各种平台运行的网络监听软件,它主要是针对TCP/IP协议的不安全性对运行该协议的机器进行监听——当然,数据包必须经过运行sniffit的机器才能进行监听,因此它只能够监听在同一个网段上的机器。而且还能够自由地为其增加某些插件以实现额外功能。 7 l6 w0 c1 @( u6 U
8 z. ?& \( q% ~, y( a$ T3 h4 j7 Q
: @8 J9 j9 U. [# P一、安装 软件的安装很简单: 3 l! L V D# v: A
# ? I! S: x/ t0 t L
1、用tar zvfx sniffit.*.*.*.tgz将下载下来的sniffit.*.*.*.tgz解压缩到你想要的目的文件夹, 如果版本是0.3.7的话(应该是最新版本吧,我不敢确定……),你会看到该目录下出现一sniffit.0.3.7的目录。 , G6 A( i$ l$ v2 T0 S
& y7 q, |$ r' E+ g* K
2、cd sniffit.0.3.7
5 @, x- g; @2 Z. T& T- ~/ r" G/ u6 \+ @" D
3、./configure &;amp;&;amp; make ,只要在这个过程中终端上没有意外的error信息出现,你就算编译成功 了——可以得到一个二进制的sniffit文件。
/ g, Q: [ c5 u9 w# _: F
_3 s' ^, i) o4、make clean把不用的垃圾扫掉……以上是普通PC上面的安装,而龙芯可以使用apt-get直接安装。 9 b# T- Q- w& R
: U3 p' D7 ?9 t: C
二、使用方法 ( ?' [% d$ f) ?2 t3 k
1 Z6 o5 E5 `2 k Q, Z! V5 G n; ~1、参数 4 \& L A( A( |9 _. d
$ }# a9 n) v5 b2 O# c0 h5 ]) ?+ ?这个东东具有如下的命令选项: # |2 i* g" _7 x9 K; ^1 ~5 X
& x9 f7 `( B* |$ \3 y- A: V2 x-v 显示版本信息
4 m( h/ S2 n6 F& l5 N: J) [+ |- q: ^, O5 I5 {$ R
-t 让程序去监听指定流向某IP的数据包
) u9 O" `) N8 z- G/ f' Z8 z0 l5 H9 M% ]9 f+ z
-s 让程序去监听从某IP流出的IP数据包,可以使用@通配符,如 -t 199.145.@
% B$ i: s- B! E
. b/ o2 [" v' t3 G-i 显示出窗口界面,能察看当前在你所属网络上进行连接的机器
5 \! d+ Z, e! E5 [) O& V( w) L$ w c7 _4 R' M
-I 扩展的交互模式,忽略所有其它选项,比-i强大得多…… h( s3 a/ x' p
m7 g) C) o1 n: P5 B6 b! q
-c 利用脚本来运行程序 ) s1 L, @. o6 `* V+ p. v1 |$ S6 G
[" H7 _. B+ C& M. X6 S-F 强制使程序使用网络硬盘
% \7 x7 [; U1 A- x* Y* ^! n) t( O! Y3 r& B* I3 `' h
-n 显示出假的数据包。象使用ARP、RARP或者其他不是IP的数据包也会显示出来 5 _; V q+ V5 K ~ N
. L0 I* I$ E! f f& j-N 只运行plugin时的选项,使其它选项失效在-i 模式下无法工作的参数:
# [! b9 t+ i$ }) X' W" L1 w1 T' I9 D3 w* o0 R5 o( s S( a, ^2 D& S( ^
-b 同时做-t和-s的工作…… ' J: }8 Z8 Y9 X9 b1 J1 s8 d. |( W
/ p) h R% `% K0 f3 A
-d 将监听所得内容显示在当前终端——以十六进制表示
0 n. z' Z) n9 @% r% W
9 R( \6 J3 w# m' b; z-a 将监听所得内容显示在当前终端——以ASCII字符表示 9 l* d" b) { U" a+ N% W
! p( w( F, \, C( N, b/ W-x 打印TCP包的扩展信息(SEQ, ACK, Flags),可以与'-a', '-d', '-s', '-t', '-b'一起运作,注意——它是输出在标准输出的,如果只用-t,-s,-b 而没有其它参数配合的话不会被写入文件。 : b, _5 o9 a& M- b4 j* l
* l ^" Y, @& l7 s1 P* P9 I
-R 将所有通信记录在文件中
7 ] N% Z$ F" m: d$ o# r7 R, o* F9 j: b ] x) }4 w6 e- ^. s/ W) X
-r 这一选项将记录文件送往sniffit,它需要-F的参数配合指明设备,假设你用 'eth0'(第一块网卡)来记录文件,你必须在命令行里面加上'-F eth0'或者 '或者'或者'或者'或者'-F eth' -A 遇到不认识的字符时用指定的字符代替
( {6 f R0 u" c: g F# D* ]
/ V- H5 U# u) x7 }! {! a-P 定义监听的协议,DEFAULT为TCP——也可以选IP、ICMP、UDP…… + C) W) M Z/ c2 W. J
3 k0 w: \3 \) J1 b-p 定义监听端口,默认为全部
4 R) q! o7 m' ~6 q+ Z3 G+ d4 O* o3 ?& `; N7 l
-l 设定数据包大小,default是300字节。 $ v. q k2 \" ~/ h& W3 Q7 ~! s5 X, ~
4 B" }1 ]& |- W( }
-M 激活插件
- [ j" ` R$ [: Y }: g0 J D0 v$ Z0 ] a7 ^0 {
-I,-i 模式下的参数 , T9 `) l. z/ e. c! v, `) {
6 \( ^( i3 q& S' P5 z( Y# f X: c
-D 所有的记录会被送到这个磁盘上。
0 ?! W( Q e9 p$ k) R: t/ _2 T2 e% X! w$ T! ]( g1 F- z2 W
-c 模式下的参数 2 a& ~7 r; A+ s: I4 x
. Z) o) t; _ ?+ s-L
- B: ?/ a& H3 A% e5 h! f) x( L* s7 E* W1 S: K+ F H5 Q: r3 h
其中logparam可以是如下的内容: % x. ]6 w/ |( B u5 E
( y6 f& ~* v7 k: N5 `9 W! g% a' [raw : 轻度
! p: O% N$ k1 r- m s T0 h* [
8 W" S" I3 A' _& o% \* W7 @1 Snorm : 常规
! B. D' t5 [2 o, f; h
( F( g3 w# g' W) n4 j5 g) _1 rtelnet: 记录口令(端口23) ' B3 I& t M, n. i( L& O ?
4 X9 Z8 [, T8 |, @ftp : 记录口令(端口21)
" m4 }- Q* N' a/ o5 B
! y5 c( \& o4 B" x7 N2 y' @mail : 记录信件内容(端口25) 4 T6 K: B% [% k$ N$ n# W. p
: m$ J8 B! {" y' S
比如说"ftpmailnorm"就是一个合法的logparam / i6 J( N3 @) o7 m
, K* B) x2 j! K0 J
2、图形仿真界面
+ C) r- Y' k; U% W7 _! u) t
9 V5 [$ e7 K; ^; S: C就是上面所说的-i选项啦,我们输入sniffit -i 会出现一个窗口环境,从中可以看到自己所在的 网络中有哪些机器正在连接,使用什么端口号,其中可用的命令如下:
" S7 c' n( O$ y" M9 G5 K8 \
1 V& Z, g- ]6 l1 B3 |) dq 退出窗口环境,结束程序
1 c# D2 @/ H) n
1 X' {. T% v5 D- {8 C- O- Hr 刷新屏幕,重新显示正在在连线的机器
* V1 Y6 n, U" j+ V$ c6 l2 b
/ e- ? k2 u9 H7 S, In 产生一个小窗口,包括TCP、IP、ICMP、UDP等协议的流量
# j4 i/ m/ q F) g
7 x5 t5 ~8 ^& Q5 pg 产生数据包,正常情况下只有UDP协议才会产生,执行此命令要回答一些关于数据包的问题
1 J6 ]4 ?5 m; I7 p+ h
/ O% W0 P- }8 q5 d( F+ K5 N* }% PF1 改变来源网域的IP地址,默认为全部 1 {* m/ l! G+ @% }" o- C/ t/ f; s& e
* l. J1 b( E- q+ X1 GF2 改变目的网域的IP地址,默认为全部 . M- h O$ }0 S( k$ h9 V# Q% V2 f
1 n" ~& ^$ q! ^( ~+ t" [
F3 改变来源机器的端口号,默认为全部 ) d2 M( G' `. s* t% d' P% S% A; \0 Z
$ u' q. ~. r0 v. BF4 改变目的机器的端口号,默认为全部
% S. H$ V0 K( H; P; n! d7 q: u
* g4 \! \9 R7 M. w1 O/ N' o& f: {" C2 p3、一些示例
0 V: [0 e: M/ I4 b/ i3 j6 V E% f; Z/ Q' x4 R' A
假设有以下的设置:在一个子网中有两台主机,一台运行了sniffer,我们称之为sniffit.com,另 一台是66.66.66.7,我们称之为target.com。
+ S- Z/ V* p: F, r- ?
5 |9 i% r9 n% A1 j1、你希望检查sniffer是否能运行 9 h/ l) ^" w: R! k9 |: B4 m& h
1 V1 j" B' h' \( ~, v ]
sniffit:"/# sniffit -d -p 7 -t 66.66.66.7 " f1 V! ]5 T" \/ g
+ [% b( D/ r$ ]+ i6 M" r. N- d
并且开另一个窗口:
5 Q9 b; \ m! A* r' D, H1 z2 e
& b) m+ r. w: X; x* t: }/ c& }2 psniffit:"/$ telnet target.com 7
& U0 E1 X4 F, g+ K4 E7 Z
- P9 Q5 ^. I' l% e0 E$ d" U你可以看到sniffer将你telnet到对方7号端口echo服务的包捕获了。
$ s: O9 e% N$ t c
- H' X# B/ \* D0 d; H8 ^7 b2、你希望截获target.com上的用户密码
- g1 W! o& U+ w( ?1 d9 Y0 b+ K! H$ a' q( f/ j
sniffit:"/# sniffit -p 23 -t 66.66.66.7 + @2 n- T4 I$ q! n% {# C
" j9 G1 }7 s% d! g+ i1 i) N# h3、target.com主机的根用户声称有奇怪的FTP连接并且希望找出他们的击键 # Q# ~2 i" G4 Z' z6 C
' l7 d9 m( e' X/ p& e% v2 bsniffit:"/# sniffit -p 21 -l 0 -t 66.66.66.7
, ]% P& G, {$ @2 n% v8 L3 i4 W% g' W4 ?
4. 你希望能阅读所有进出target.com的信件
) g1 w* \6 u1 K4 u% g. b% |. F+ a& ?7 k, j4 Z
sniffit:"/# sniffit -p 25 -l 0 -b -t 66.66.66.7 &;amp; ! C6 B8 r' h7 V
0 A3 M5 T+ E2 R0 Y3 q
或者
( ?& k$ h" N& ]5 x% }" y6 z6 }
7 @) F) n' @3 E F$ Hsniffit:"/# sniffit -p 25 -l 0 -b -s 66.66.66.7 &;amp; 3 J8 Q7 Z, D, e5 G0 y1 O
3 I6 S) z1 ~$ F. F: |/ K% P
5. 你希望使用用户交互界面 5 I: C3 y6 I4 j l9 n
: J9 D8 z+ X8 ~+ ]3 j
sniffit:"/# sniffit -i , N9 v" O' Z+ G
! q) y# R# u* B8 L2 |6. 有错误发生而且你希望截获控制信息 " P. N2 n+ H0 k% g" A6 F" V
( L8 u: n) A/ ?
sniffit:"/# sniffit -P icmp -b -s 66.66.66.7
7 [& y# c b3 d6 \+ d& f- C+ F. Z) w1 V @
7. Go wild on scrolling the screen. , d# f7 N' F- d4 L
3 {4 }; O2 E% m5 Lsniffit:"/# sniffit -P ip -P icmp -P tcp -p 0 -b -a -d -x -s 66.66.66.7
2 b5 \8 M1 `( X( V; _. P- @2 j" y k0 q" B/ Q0 v
与之效果相当的是 & x) H; t$ V$ d" s( K
3 k. `7 U! d% F8 G# A) qsniffit:"/# sniffit -P ipicmptcp -p 0 -b -a -d -x -s 66.66.66.7
% p7 e& H, j' l' `: F. X" M- h( H7 Q. c
8. 你可以用'more 66*'读取下列方式记录下的密码 5 g4 o8 L# L: v h
- R% O+ u7 F* Isniffit:"/# sniffit -p 23 -A . -t 66.66.66.7
3 W7 r6 V' a; {- Q
, g& ]% J3 r, H: E5 ?或者 + j/ v2 Z! W6 a+ M N# _: U. U
) F3 O, o* j8 O ^
sniffit:"/# sniffit -p 23 -A ^ -t dummy.net 1 T$ Y. w5 O; s
! j# ?4 M7 e) T% q$ M三、高级应用
. \. C* @( s& x& M3 J7 R# j, s
8 j# z+ b* o) U& a9 j% d1 v0 s, V1、用脚本执行
6 G0 @% `" s1 l5 v, g+ K* c+ L( e% D& W! \" V
这是配合选项-c的,其执行方法也很简单,比如以如下方式编辑一个叫sh的文件
6 b" S) q: y+ u. U1 K# G8 c5 h4 h1 |
select from host 180.180.180.1 # X' z/ w, Z/ X- g: F5 `7 d
7 ]; t E0 L, o5 w5 u3 @select to host 180.180.180.10
3 w/ _% ]! Q1 g0 C2 ~ Q) o3 `; H6 Q: I% {. S8 b
select both port 21
: }/ e D, o4 A- ?& k9 u5 c X' u6 D( Q3 h9 W0 F
然后执行:sniffit -c sh
6 y6 y) x2 ]' m" r: H" z8 E( c9 J* n+ ^8 H- Y
说明:监听从180.180.180.1送往180.180.180.10的数据包,端口为FTP口。这里不做更多说明,你 可以自己去看里面的README。 / p+ Y; V4 E( x+ {# F! `: X
" v1 N6 e) A9 r3 z) j" L# ?* B- C4 o
2、插件 / I% {: n1 \; p, p
0 }/ W& D1 ~5 \, N4 }4 L( G: @
要获取一个插件是很简单的,你将它放入sniffit的目录下,并且象如下方式编辑sn_plugin.h 文件: ) Z# d2 x# B5 u! a; [$ {& K/ e
5 n% L9 w$ _. v! c
#define PLUGIN1_NAME "My plugin"
% k5 v8 {6 v3 J ^3 Q& ^$ W
) q0 M9 v" M/ w# d% @6 E#define PLUGIN1(x) main_plugin_function(x)
# k2 y0 B& ~% c) `: ?3 H$ H3 H
$ } M. ?( W" ?8 e6 _#include "my_plugin.plug" # w v, z6 ]' P. m+ a+ K8 l
; c8 q6 K. `! ]' t) q
注意:
2 a$ L, B0 P) g, {& J6 C9 P; V9 \
a) 你可以让plugin从0-9,所以从PLUGIN0_NAME到PLUGIN1_NAME……不必是连续的 # F0 X& ` u g
# k8 l5 H j1 M
d) #include "my_plugin.plug" 这是我的插件源代码放置的地方。 如果想详细了解的话,还是看看里面 5 m- l% K8 c D
6 P$ i* W( y. ~# Q \" Y的plugin.howto吧。 3 U( b5 {: P6 x% M) n( ~$ U
) F D M2 P$ G3、介绍 tod
$ E# _' Y" k& J I2 L+ d: x3 e7 a7 b+ A0 |' x7 F0 X
这东东便是sniffit最有名的一个插件了,为什么叫TOD呢——touch of death,它可以轻易地切断一个TCP连接,原理是向一个TCP连接中的一台主机发送一个断开连接的IP包,这个IP包的RST位置1,便可以了。
3 `7 K& j$ G2 Z4 e. S# V' [6 w+ i
! w6 `$ |$ ~3 R将下载下来的tod.tar.gz拷贝到sniffit所在目录下,解压安装后
1 n) Q: Y, ~( J- ?2 J5 Q* j. L! w! o2 S/ w
ln -s tod sniffit_key5 5 ^5 e8 U& a {7 i! o
. o( {2 F; l6 }# }3 H" k
就可以将这相程序与F5键连接起来,想切断哪台机器的话,只要在窗口中将光标指到需要断线的机器上按下F5键就可以了。你可以自由地定义成其它的F功能键——F1"F4不行,它们已经被定义过了……
点击图标进入精品网摘收藏 欢迎大家加入网络收藏夹