|
作者:李国莉 来源:http://www.eviloctal.com/forum/ / r6 N6 C. f6 B/ }( u+ M
' D9 W0 S& [' A! k* m3 B M, c% w
tcpdump采用命令行方式,它的命令格式为:
5 y9 \5 a2 H* V* B1 v tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
: H& o2 W8 l. ?. |7 V [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]3 K3 E# _% W* U* _* F# G
[ -T 类型 ] [ -w 文件名 ] [表达式 ] * f3 V, y+ U" \7 B" ^
1. tcpdump的选项介绍
6 M+ A5 r2 c6 U M3 J: P, L/ P -a 将网络地址和广播地址转变成名字;
. M1 {+ G7 d# Q. R0 k( t -d 将匹配信息包的代码以人们能够理解的汇编格式给出;
! g2 \1 z& _! {/ b( b; x' g -dd 将匹配信息包的代码以c语言程序段的格式给出;6 z+ Z1 Q( y! `% M; y- h3 s
-ddd 将匹配信息包的代码以十进制的形式给出;
% g$ ?& W) O. q# m( a4 H, _ -e 在输出行打印出数据链路层的头部信息;8 J6 r- r* o# Z n Q" h9 s8 _7 j
-f 将外部的Internet地址以数字的形式打印出来;) g' k4 J) K1 E) Q! t$ M) Q
-l 使标准输出变为缓冲行形式;" |' @- f' p5 h
-n 不把网络地址转换成名字;% E. @5 d& c/ I3 z2 H, a
-t 在输出的每一行不打印时间戳;
* Z& G* D- C2 i -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
% B/ h$ O$ L: d5 ?( U3 X' \3 B -vv 输出详细的报文信息;) h- T; | r% E& m* r+ I
-c 在收到指定的包的数目后,tcpdump就会停止;$ \9 y- m* K/ B/ q/ o
-F 从指定的文件中读取表达式,忽略其它的表达式;
' ]- l5 o( @0 P* g8 L& g5 u7 X -i 指定监听的网络接口; [; j$ h% F+ Q9 @0 B2 T5 n
-r 从指定的文件中读取包(这些包一般通过-w选项产生);: I4 ]' p, Z* n* Q8 [9 {" w, }
-w 直接将包写入文件中,并不分析和打印出来;
4 V% S2 v# ], d6 O. `9 b" O2 ~2 M5 f -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程
: b3 }+ C4 ]7 e# f4 l/ L调用)和snmp(简单 网络管理协议;)
# p. [: k' e) X/ Q/ Z- T: E 2. tcpdump的表达式介绍
" G5 c! c8 C- C+ W5 R, w 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表
3 U) ]% I1 o& D( N* @: p2 ]6 z达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会
; ]. p5 Q f s- }4 x+ q( ?& f被截获。, K& M$ P; ]0 q0 x
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,' l. ], G+ C' Y9 }+ N
net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明
- P d& p3 }+ J, c8 z& D: M202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是7 |3 b6 {4 z6 H/ L6 Z
host.) s0 x+ h0 o, `7 Z9 ?
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src , x/ W+ g! ]0 z0 e$ g" R; A1 ^: f
这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.
; q6 c8 Z6 G: @* x' P f6 a) f48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则
% l% ?8 y: D7 t缺省是src or dst关键字。 q9 [0 d# v9 S6 p0 T, a" _* ]
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在9 T) E3 z7 F8 u. x
FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e# y1 ^8 T+ p5 ^3 s
ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。
3 J1 {) T% |$ |9 U3 [其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会. Z2 O9 l4 T8 e# i4 J
监听所有协议的信息包。
9 [6 N+ ^8 D% @- c `6 k 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
( Y3 \% d. l) Sgreater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
% a9 _! z* y1 [* Q" [' Ar' ,'||'; q5 t) }1 A1 ]; w3 u
这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来8 L& v$ h- S) o
说明。
! [3 q. `4 b+ c% N4 r9 F- O (1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
# K- Q/ o- d8 A- V# @/ L9 D5 m #tcpdump host 210.27.48.1 9 z$ g7 ], E* `. R4 v' W+ b* y
(2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令. w' R. O4 m6 R, i# d9 M8 c, N f
:(在命令行中适用 括号时,一定要
f' D9 a' ] r! f* M7 q8 _0 Y #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 7 N* R" y1 |: ?% q
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包) `* q. I7 R# _# r" p. ^, I
,使用命令:9 k7 `' F- f3 M# F# t4 W- x8 A, G
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2. V6 @+ k- z( G. Z
(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
, u% G8 C D& |5 s7 K( B #tcpdump tcp port 23 host 210.27.48.1 " s3 f$ {' g6 D" [3 w* x3 ^
3. tcpdump 的输出结果介绍
' y( Q% u6 P% `$ x; z 下面我们介绍几种典型的tcpdump命令的输出信息
9 I: L4 P6 B/ k& |4 i (1) 数据链路层头信息
9 C. S7 i! Y$ }$ t. _( [1 V 使用命令#tcpdump --e host ice
2 c9 \2 h; f7 t5 c5 S% w" d( y% U6 ~ ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A: y# G6 d, D) J2 d
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条0 k% @$ e& n* f7 d' u8 z9 B
命令的输出结果如下所示:
q& s7 k5 o6 M; I: Q+ f21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.2 N, q6 `/ ^$ o- @* l9 z# G" r6 W
telne/ V7 t0 B3 L9 S
t 0:0(0) ack 22535 win 8760 (DF)* l7 A1 E' u9 X- y
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该( g/ f5 {+ c! r( D5 E0 ?
数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它
3 P3 C1 q+ w) s" u- K+ J表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的
: x) T3 b ]: t目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.$ e: P3 n. ]" Y$ C% O
telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535
0 w" Z) ~8 W2 Y' S' O1 W; c5 [表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.
1 T( J& ] ^, g0 \7 } (2) ARP包的TCPDUMP输出信息
5 A* _6 ~+ T% ]: K/ ^8 r. K 使用命令#tcpdump arp 8 U/ y* ^& C) }1 z" F7 p0 R# Y1 t
得到的输出结果是:6 S6 W! N j" k! u6 S
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)5 Y+ I- x; C( _ Y
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af
+ ]9 u. o: Z8 X F:1a)
1 a: B* U/ d+ f7 T8 C 分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是 v" k8 X8 F# Q" B* _
ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:5
/ {6 ^$ w+ n9 p' [6 o! I8:af:1a是主机ICE的MAC地址。
+ R3 C& _ V: c" Q; t9 _ (3) TCP包的输出信息. \6 p' C' \9 l8 y7 R6 m4 ]' N3 b& F
用TCPDUMP捕获的TCP包的一般输出信息是:
8 J2 W- h! O9 y1 a5 H% c src > dst: flags data-seqno ack window urgent options
/ ], m2 j- g7 j8 X% M src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F; T" z: F7 a3 G7 v* b
IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是
1 U6 v3 }2 N i1 Z下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. 6 s& i, N! y2 M: q. ^
Options是选项.
$ }+ @; a) ~$ _$ r: P6 c! a (4) UDP包的输出信息5 |1 f9 z$ l* K1 J* O8 I" d. l! u
用TCPDUMP捕获的UDP包的一般输出信息是:
7 N* [, j6 Q$ j! i route.port1 > ice.port2: udp lenth; @5 B" a1 S. C+ p
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机
" i, \, @ Y# z! b0 a% E6 S+ ZICE的port2端口,类型是UDP, 包的长度是lenth
0 A3 T6 ?% j* S4 c " S2 v4 j+ U+ T
; j# p- D, H# Z) I8 X
0 b& y( o' j1 @0 v `. T |