数学建模社区-数学中国

标题: Tcpdump的使用 [打印本页]

作者: 韩冰    时间: 2005-3-20 13:48
标题: Tcpdump的使用

作者:李国莉  来源:http://www.eviloctal.com/forum/

! E/ A- ?* C) U

/ ?. O% N$ ~8 N9 s( Itcpdump采用命令行方式,它的命令格式为:, c4 ~$ e5 i7 c- o. K   tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] * i% C4 v' {: X+ Z/ s/ A          [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] 3 l$ |! H0 m0 P3 p8 g9 _; T          [ -T 类型 ] [ -w 文件名 ] [表达式 ]

$ k1 \. X7 h: w& P

  1. tcpdump的选项介绍6 H9 q% z3 B5 s+ j B    -a    将网络地址和广播地址转变成名字; # ~5 T# X X+ c   -d    将匹配信息包的代码以人们能够理解的汇编格式给出;# C/ w7 u a1 V* J) E) t. _    -dd    将匹配信息包的代码以c语言程序段的格式给出; 4 T1 ?: c5 E/ t$ w N   -ddd    将匹配信息包的代码以十进制的形式给出; : [% a6 [# W V- T( W   -e    在输出行打印出数据链路层的头部信息;: |7 g3 q6 O0 j; Z' Z J' q    -f    将外部的Internet地址以数字的形式打印出来; % Y* W7 F$ D( F) g# T! B/ b   -l    使标准输出变为缓冲行形式;/ M3 t$ J; O. O9 b* N/ o    -n    不把网络地址转换成名字; 9 x2 V. n* M# q* Q8 J5 W   -t    在输出的每一行不打印时间戳;. }' P! h# I/ n0 r4 x) Q    -v    输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; * R# h- E, O' I! s8 D/ F+ Y   -vv    输出详细的报文信息; ! k- _8 l. c" w! o8 U& [" }- T   -c    在收到指定的包的数目后,tcpdump就会停止;1 U6 y( u$ D# ^4 n1 R1 M& Z    -F    从指定的文件中读取表达式,忽略其它的表达式;$ W* ~% ~7 F: A4 S    -i    指定监听的网络接口; . |, W( j$ h! |9 T& V# A$ D U   -r    从指定的文件中读取包(这些包一般通过-w选项产生);7 C1 @4 i. G5 L- \. j; B+ C& H6 g    -w    直接将包写入文件中,并不分析和打印出来; ) H8 H# G. s) N+ m s' s" j   -T    将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程 5 [4 W/ Q+ R" u6 G& }5 k! b* V# {调用)和snmp(简单       网络管理协议;)

# y) ~( G& g+ \9 }' _* B0 G' s' R

  2. tcpdump的表达式介绍 9 t5 E/ v$ \8 v% @3 T! N/ O   表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表: j. k! L( G) c- b" y2 G7 H( Z( h 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会 # b9 l* {5 K0 l( P被截获。 7 y0 {( Y7 r# S. w- S   在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host, + O2 O4 }7 A' w! H: _net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明% G: X* f4 O% |1 S, x: v c/ k 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是 2 J7 ]. |; Y& Phost.1 F$ m& ?# m; m3 ]& f& Q8 | O    第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src , 0 B( W; i7 |4 [: ~# B这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27. " _1 ~7 k4 T+ x1 Q1 b$ {- ~9 A48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则 ) D8 w7 |- I7 N2 N I4 J, b缺省是src or dst关键字。2 f2 q% { R2 Y1 B3 \/ ^    第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在* n3 T; Q/ c" ]0 f" O" c2 o FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e) I8 a' e8 W6 Q, |( t- C9 l ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。+ N- B; g8 i' j# d 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会2 s/ g* |' e; O" q% D 监听所有协议的信息包。6 M) @7 j8 i0 a, n; @0 l    除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less," ?! N: F6 h' d& E `( H C- R greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o ! V0 f2 @! ^( [ ]r' ,'||'; 7 q$ X4 S9 u8 j ^6 x   这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来' Y3 a9 s5 V3 X! X5 n; }5 P 说明。 A* |; p9 d& s# O5 ~1 a# o    (1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: 9 w) ~/ L, F4 m% x: ?% L+ [    #tcpdump host 210.27.48.1 7 }4 O/ z" @. g    (2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令 * K: ~6 q+ z5 V! R$ T" Z( d:(在命令行中适用   括号时,一定要 ) G8 Z0 E% u0 H+ p3 o    #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) : t, l- O! X( A9 s7 s    (3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包2 E( S4 t/ k& M0 Y' G7 u" G( G- q ,使用命令:9 W# J9 |% Q, A& G3 m/ R3 _     #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 ! g% o' q8 T" ^3 S8 k ` t   (4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: + ?% B* u0 q% A# H    #tcpdump tcp port 23 host 210.27.48.1

! P2 g; d& ?: f3 y4 a/ F

  3. tcpdump 的输出结果介绍 , a8 S" t+ O4 p v   下面我们介绍几种典型的tcpdump命令的输出信息 F w% `5 o9 f, h. S% u$ i    (1) 数据链路层头信息 3 _3 k( G" }; T: v1 x7 W8 r, t   使用命令#tcpdump --e host ice # N& @+ b+ x% l' h& t, G   ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A 9 I( ]" Y/ ?. B' q1 _" A" B( _   H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条 " [5 j3 Y2 Q5 m u4 t' t5 G命令的输出结果如下所示: # _& A f! l7 W( S$ I21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice. t9 _9 L5 s" }+ b2 a0 D: @6 jtelne : m; S9 A, @2 d. a3 T$ dt 0:0(0) ack 22535 win 8760 (DF) , u3 r" r& p- z3 Y, O! x  分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该9 u" l1 @- L7 v. u2 g9 J0 f* V 数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它; N$ i, @5 ~. o6 g6 {1 d7 b 表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的 - V5 D2 G) G% S) g目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice. % d# y$ ^* ]) f' w) A( Ntelnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535- A3 J0 Z' h5 b! C- p* }! J 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.

* ^5 s! {/ z$ v

  (2) ARP包的TCPDUMP输出信息 & R) E2 G( Z0 q7 O! x" H) A   使用命令#tcpdump arp / G8 z; \4 M1 r1 p    得到的输出结果是:" U& @9 r2 |1 I9 e& m& M) L   22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)6 @+ }6 | F0 w% m: O   22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af ) v+ a- x8 O! d6 Q3 o:1a) 4 B! d ?) `* l  分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是 % @/ A8 P; M9 TARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:54 E& n* ]! e! x( V0 v9 t 8:af:1a是主机ICE的MAC地址。

. x* R. Y9 d# l6 U/ B& e

  (3) TCP包的输出信息/ ~& D# T4 P. o3 [    用TCPDUMP捕获的TCP包的一般输出信息是: , F4 I% Y; c$ \! ^+ S  src > dst: flags data-seqno ack window urgent options7 X6 C& m8 h1 H0 g   src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F; G0 d4 b( I. ] IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是 1 O- k5 h8 U# _4 m0 f9 m0 y下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. 3 Y" b! u& O. \% g: { Options是选项.

, F1 t% }" Q1 R2 r4 k# r0 z7 \

  (4) UDP包的输出信息$ G" t1 D1 n& A2 G) c4 B    用TCPDUMP捕获的UDP包的一般输出信息是: 2 F# ?8 L1 M# j2 `  route.port1 > ice.port2: udp lenth # m1 J$ P: [- }  UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机 0 v) Z# `( v3 L2 AICE的port2端口,类型是UDP, 包的长度是lenth# _8 @: r1 S' J s: S; b9 M- u/ A$ P7 U6 S

* ?, [% |* x1 N c$ |) {- A$ u ]

. f/ v# e( r' i, L! t






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5