|
作者:李国莉 来源:http://www.eviloctal.com/forum/ y9 D ~3 [7 D5 k% `0 E
" G- ]: U4 [' k8 \3 stcpdump采用命令行方式,它的命令格式为:
3 z; i0 ?$ M3 }& C2 V tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
6 T; c* u( ?% q' C [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
7 P% X' M. l' _: I2 w: P' E [ -T 类型 ] [ -w 文件名 ] [表达式 ]
# o; U* C8 k6 [! U6 u 1. tcpdump的选项介绍1 i% D4 a7 b& K, d# G5 K4 ?: y
-a 将网络地址和广播地址转变成名字;
# c' d8 k9 }' M& D5 O) _9 W& k- e -d 将匹配信息包的代码以人们能够理解的汇编格式给出;
3 }, K5 B- K5 f% ?9 H3 ~- ] -dd 将匹配信息包的代码以c语言程序段的格式给出;
& X2 P1 c" r; D2 g. ~7 o -ddd 将匹配信息包的代码以十进制的形式给出;/ { V) N7 U1 p0 b6 X; |8 ]0 F2 a
-e 在输出行打印出数据链路层的头部信息;* @; V2 D9 ~2 q. b X7 H/ a2 B
-f 将外部的Internet地址以数字的形式打印出来;
# J% f" t! U( P. E6 Q -l 使标准输出变为缓冲行形式;
) f- _ z- F* v% k1 V0 J -n 不把网络地址转换成名字;
+ Q# ?3 m* h2 v8 ^ -t 在输出的每一行不打印时间戳;: T, d3 U1 i& A* V# {) [
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
1 T& L* Z1 j7 N% W/ Y! } -vv 输出详细的报文信息;2 N4 T. `0 k/ z! v/ X1 X! w; }
-c 在收到指定的包的数目后,tcpdump就会停止;
3 l+ a) }- n* P0 R. P/ T -F 从指定的文件中读取表达式,忽略其它的表达式; n+ K* i! r1 ~7 ^3 X
-i 指定监听的网络接口;
% [$ m; o9 u$ c2 m9 y -r 从指定的文件中读取包(这些包一般通过-w选项产生);
! j& N1 F' s9 k2 F -w 直接将包写入文件中,并不分析和打印出来;, }1 B' V$ |) k. N) N K
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程5 Q6 \: }7 Q6 n" i' R; q' M
调用)和snmp(简单 网络管理协议;) $ {2 ?* I5 T* f
2. tcpdump的表达式介绍
' J* o! D1 }0 I% L 表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表
. q; R5 _3 K5 N5 w" I: T达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会
; x e" ~7 {* l6 {9 `被截获。4 W6 N8 z6 V+ p8 J
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,3 i& o9 n/ y, F
net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明$ b9 ]6 V5 E. N7 K1 O9 I
202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是
" C9 }/ t1 h* ~0 N' [. E mhost.; b- W: H8 _ E* Y7 v" S
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,3 }2 N9 H3 t6 P" z1 }
这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27. j: L- X9 V3 u- Q% `' w. M4 s
48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则
# i8 \1 J2 X' j d! A5 t7 `缺省是src or dst关键字。
# S2 o+ i% b% f" f R7 a: ]' G 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在
4 U* q* H% t, h) ^9 JFDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e. t/ e Q G6 N+ [& k5 P! `2 J
ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。
8 o# C9 I8 c; ^) m" Y. I其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会: u4 W& P9 C( J/ t/ J8 S D
监听所有协议的信息包。
2 f& C. R, C, l$ G3 M- i& Q& c 除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
; v3 a3 T6 o' n O ^, h5 Zgreater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
6 X5 u. s# F3 R& ar' ,'||';* e: W) K: U5 L3 A$ F8 y9 |8 }
这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来
$ e' h8 J3 ]3 ]/ {1 z说明。, A" ?7 _) J' M6 ~2 t B4 s8 \
(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
) k# ^ |! N _) e #tcpdump host 210.27.48.1
4 F; o; b, V0 B0 h0 D (2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令
" ]; w% w, r4 z! Y8 N1 ?:(在命令行中适用 括号时,一定要
' E9 n( z L, w6 m1 ^5 w! B+ P' Y #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) # \ V3 m0 ^* c
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包, x8 r# i( e4 S9 [2 R& U: C
,使用命令:
; [7 E* h, u- {% F #tcpdump ip host 210.27.48.1 and ! 210.27.48.2" S2 `# q# m; {% o; ]0 y
(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
: j5 v" `7 o4 G3 ?% e #tcpdump tcp port 23 host 210.27.48.1 # E5 @8 M8 F+ i) J; m
3. tcpdump 的输出结果介绍
3 k, i! n! t" s" W" { 下面我们介绍几种典型的tcpdump命令的输出信息7 R1 M: G& H! K; z! h6 c
(1) 数据链路层头信息) a- X1 F, b* z* P8 \
使用命令#tcpdump --e host ice
% k5 S+ H' o1 ~1 V ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
. O2 ^8 @- `1 w4 b1 M' r H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条
% }+ W8 ^. _' q4 B, N命令的输出结果如下所示:1 Z% }/ q& J: G* h
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.
) n- O9 c5 a* M6 b* ttelne
- t( R0 \7 z3 c5 } m7 O) S, ft 0:0(0) ack 22535 win 8760 (DF)
& \& u) M, \% ?/ `7 } 分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该
7 ]1 C4 B3 s+ G( \( w) G. k: M0 x4 o数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它
$ F, z7 d5 U" k- P( F; `表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的
2 e3 t$ ?' n2 y% @" q0 o/ i目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.
, X1 C5 D& H0 S# htelnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535
5 w9 B: r N3 H# J5 G t6 d# k' Q" p表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.
, v, o* S7 n+ g$ P! f2 y (2) ARP包的TCPDUMP输出信息
: y" v+ p( M: o; K( `) k* D 使用命令#tcpdump arp
, u% G: K, C, b/ w2 O- f) y \ 得到的输出结果是:. j0 l2 s; K& m/ {$ M2 _' b
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
$ U: x1 g- A- j3 | 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af
5 R# A; c/ t! _8 O# n:1a)0 B$ ~$ a, q0 A
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是
9 h, J1 L: _& K C$ z2 O" F/ LARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:5
6 P0 A+ {; K0 q9 |8:af:1a是主机ICE的MAC地址。
1 V6 z( K/ N- p; T0 {4 M (3) TCP包的输出信息# x' ^4 A6 z+ t
用TCPDUMP捕获的TCP包的一般输出信息是:& x! L; v- J+ p, l: ?9 a3 m
src > dst: flags data-seqno ack window urgent options' B8 O+ R6 A9 a y' s/ ]/ N6 x
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F
8 {5 i/ R, V) i+ s$ S" dIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是( ^* I5 d: |3 x$ k4 |% R
下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. S8 l1 `# X* y; i3 e# d8 E
Options是选项.
1 p# P% p6 C" s" D; M1 W (4) UDP包的输出信息/ W: G+ H- v s2 n3 n
用TCPDUMP捕获的UDP包的一般输出信息是:
/ z; \' K _+ _( d1 E5 M route.port1 > ice.port2: udp lenth
# b6 p0 R/ c7 H) u UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机
8 F) N& K8 f: @+ H2 sICE的port2端口,类型是UDP, 包的长度是lenth. Y) s7 _) f0 Q- J
# S% h+ z4 O S* I$ Q
P$ W/ S! S! s
5 X5 \+ ^4 G1 H8 t) { |