|
作者:李国莉 来源:http://www.eviloctal.com/forum/ 5 _9 R* I& b& R/ {& |; z
: n" [% ^: @" S$ Ntcpdump采用命令行方式,它的命令格式为:1 M0 }( k) E7 ^" g( b" q5 q
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]0 z, {8 S y2 r2 q) v8 p0 s
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
3 _$ H9 e0 _3 _# w9 i; _ u u: ? [ -T 类型 ] [ -w 文件名 ] [表达式 ] / s8 X, O8 f9 w' H) o+ s
1. tcpdump的选项介绍
7 A( ~5 ]" w! R' \5 d -a 将网络地址和广播地址转变成名字;$ t }) [: H3 ^, H% U
-d 将匹配信息包的代码以人们能够理解的汇编格式给出; `" K9 b/ T2 a3 E- e1 n
-dd 将匹配信息包的代码以c语言程序段的格式给出;1 N* h- v/ m2 }
-ddd 将匹配信息包的代码以十进制的形式给出;- g- ]! t$ M8 E- Z( Q
-e 在输出行打印出数据链路层的头部信息;
( o4 ?9 r0 _. A' q4 H& \5 } -f 将外部的Internet地址以数字的形式打印出来;
, o1 [2 V6 b7 [2 G -l 使标准输出变为缓冲行形式;% {) H$ p# B; ?# U, _
-n 不把网络地址转换成名字;
, r9 i4 ~7 j. G3 K1 I# ] -t 在输出的每一行不打印时间戳;
% ?4 T% k7 j# E( R7 [ -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
& }! t& u9 L3 m9 I -vv 输出详细的报文信息;
5 D7 D, g5 Z& ~! `- E! S. D -c 在收到指定的包的数目后,tcpdump就会停止;" |! _( W/ s$ w( k/ q
-F 从指定的文件中读取表达式,忽略其它的表达式;0 q1 Q B! y# I G) a" D
-i 指定监听的网络接口;$ G5 V0 j5 {6 Z- o; }6 _
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
! E7 I" p# A* C+ h3 |- Z, \ -w 直接将包写入文件中,并不分析和打印出来;
4 t# v' e- c7 Y Q t -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程
3 O. x. G) B* J/ K9 t& I调用)和snmp(简单 网络管理协议;)
3 ]! j1 I5 }. d. M; | 2. tcpdump的表达式介绍! S! f2 u& @# y9 J6 q
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表! X! r6 x+ S% m0 F
达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会
; [3 I' y4 V5 F% d3 ~被截获。9 S# K/ _5 Q; }1 K+ D. D
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,
0 Z. @8 I% I/ u2 onet,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明, A) I! w7 ^8 v! l# o1 L0 j1 @
202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是+ B, |- k! e$ A
host.% u9 ~( L: \ l. P
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,
# J9 @ j* ?9 k3 W/ S这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.( @( x( K$ \% I1 g
48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则
! P+ S+ z8 `5 ]/ V9 y缺省是src or dst关键字。
3 J4 h9 i0 U3 g$ C8 i5 H6 q1 ^6 s 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在' ~: _+ _8 M, n8 r6 h0 p+ e$ i# @: b
FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e
! E1 b$ b9 w$ r0 Y8 Nther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。
# t" ^. ] z8 _$ V+ H. i4 Z其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会
' k5 p/ m- U4 i% S ^监听所有协议的信息包。; x) }; d2 X* o: y, t+ ~9 G, U
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,) M7 `. H: i v
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o5 m* P; O) P7 \* o* |( {
r' ,'||';
; x' {# h) X: a 这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来
" O5 X! ]0 ~2 g$ E) c2 W) r3 [说明。
4 @- R [3 H% H3 j (1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
5 `' z9 b2 R" Z1 k #tcpdump host 210.27.48.1 0 T9 Q1 ^/ `6 Q# V
(2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令
4 d( F: o9 K8 m N: w R1 C8 M$ O% A# U:(在命令行中适用 括号时,一定要* Z: e+ t1 \. K0 D
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 4 b# j1 D- X! Q8 S4 N) d* L
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
0 g8 P" E& p# G3 M# y' @* g1 j,使用命令:5 b, F$ q) Z( }! [9 h
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
! U/ ? W7 n4 z9 d* r% M$ [' ^0 S (4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
3 S1 o: j L$ `3 M/ A #tcpdump tcp port 23 host 210.27.48.1
4 x) h% N- b0 N" r9 v+ @ 3. tcpdump 的输出结果介绍- r6 I' k4 Q, `0 S7 G3 T4 U
下面我们介绍几种典型的tcpdump命令的输出信息, J) P: |8 a3 O5 @( L
(1) 数据链路层头信息% B0 r. q; B$ ~8 I Y }5 d2 `$ y
使用命令#tcpdump --e host ice4 `0 {. w0 O) n0 X% n
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
; n7 k A4 E1 T4 x8 b" l! g H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条1 V W7 o9 f! _1 ~
命令的输出结果如下所示:
0 j) l: Y! l: c" L r; d21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.: i3 X4 P4 ?. I1 N
telne( A! b3 a3 T0 p& G. ?. m
t 0:0(0) ack 22535 win 8760 (DF)$ A" r+ q- e9 n, g8 w0 ]& E
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该
2 q! k9 N B% [1 U/ U9 j数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它
* n2 Z: o1 z" C% K& P- V6 f3 p表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的3 `3 w: Y# N7 T2 Q* C
目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice. y, R: V4 e9 q. @, X( @8 A1 @
telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535
& B: _0 O6 o0 m表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760. 2 W5 E- G' e, N( ]# W: o
(2) ARP包的TCPDUMP输出信息9 P) r2 Q1 P, z! ]0 v* ?
使用命令#tcpdump arp
) |+ }9 @; l2 ?1 h( j 得到的输出结果是:
9 B2 ] R! G1 ` 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
3 [4 I0 D, Q% c Q7 k' H 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af
0 w) v5 c: u7 J; s. ?+ |:1a)- v( c8 H) i8 Z6 J" E7 d9 W O
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是
$ W) w; [# y H- W/ MARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:5) `0 N* [: e; X8 Z
8:af:1a是主机ICE的MAC地址。 / C- o) t$ n e* }1 i$ ~2 }5 N
(3) TCP包的输出信息
3 t# R) j6 i2 t @7 l0 a C% V2 q 用TCPDUMP捕获的TCP包的一般输出信息是:
( M4 V0 \0 x u* ?: m src > dst: flags data-seqno ack window urgent options, l+ b& `/ ~7 B8 e
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F
6 Y( ], Y9 O) p4 \9 n7 D( E ?IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是
' G" E0 }4 T1 U2 t8 w$ g- X/ i下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. - }3 k% X% |1 F% M. F$ o
Options是选项. / b6 L3 a, N. m( E5 v& Q: m
(4) UDP包的输出信息! c) [5 b0 G9 b+ q6 @, u6 {
用TCPDUMP捕获的UDP包的一般输出信息是:
# R! E7 X' \7 l; d1 w% Z route.port1 > ice.port2: udp lenth# {( ~9 S8 O% |, }* R8 Y
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机% `; |, x ^; \ \5 G* Q; I: p
ICE的port2端口,类型是UDP, 包的长度是lenth
% ~0 g( p& Y& j( a5 T ; \! V5 v6 S2 C" b. i; a
! B) r# A5 V& v+ c$ j# W& M$ k* H. Y6 m
|