|
作者:李国莉 来源:http://www.eviloctal.com/forum/ ( c' K9 l; Z! R! Y4 X/ y6 V
$ Y+ p# S5 O. Q8 P( ~$ I$ u) Ptcpdump采用命令行方式,它的命令格式为:1 C& F6 U# k/ i5 C" {4 N" D* q
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
0 M2 L5 W: g- `9 ^7 O [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]9 O! N& a' Z. M6 B! {. R- l$ T/ s
[ -T 类型 ] [ -w 文件名 ] [表达式 ] 7 V, Z# _3 n$ u
1. tcpdump的选项介绍
4 }8 K5 ]8 c" w" x$ z -a 将网络地址和广播地址转变成名字;' B4 m' B! ?. z* i3 r. x2 y" Q' y
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
8 j+ D" y9 f8 s+ m e$ I$ o -dd 将匹配信息包的代码以c语言程序段的格式给出; s; s" T& J: c4 o
-ddd 将匹配信息包的代码以十进制的形式给出;
, Q, i4 F, N, e7 ` -e 在输出行打印出数据链路层的头部信息;
! A6 T* t7 `) W -f 将外部的Internet地址以数字的形式打印出来;
- f: q, [' N0 p( ` -l 使标准输出变为缓冲行形式;; M' o- v- \1 L) s; J$ G8 d
-n 不把网络地址转换成名字;
: P! n; x; I; {/ [" l -t 在输出的每一行不打印时间戳;, i/ \/ P" |- O
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
5 `6 U7 w: }3 }2 k$ ?4 n& D% \ -vv 输出详细的报文信息;
. Q# L: A' T' g. Z/ Z! q -c 在收到指定的包的数目后,tcpdump就会停止;
- V/ X1 u: y- T- R -F 从指定的文件中读取表达式,忽略其它的表达式;
- j/ c, \3 |* I+ _$ `. m: g -i 指定监听的网络接口;" f: Z, g j0 _; a" z
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
% ~0 m4 w7 \( \) h -w 直接将包写入文件中,并不分析和打印出来;% q- ~- ^- p8 z* U
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程6 O3 k0 N/ {2 i. [+ Q+ B
调用)和snmp(简单 网络管理协议;)
" n3 N V8 S1 i" I; F 2. tcpdump的表达式介绍: D4 R! F0 o2 k* \$ n7 ^; T2 z
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表
. U" q. o6 k1 k+ s3 Y1 D9 }( J3 x达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会) H& e% [, \ m' B+ n
被截获。
7 ] M" G6 M' k) [% S9 r+ g 在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,
4 G7 F# ? r, K0 {6 ^. t) Nnet,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明
" ] g' \8 K" D2 ]. W202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是- e2 m6 ^+ w4 I7 c3 i# L! i
host.9 H+ {. V9 W& [- N. m' r6 P- T
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,: U1 D/ h7 M6 B: m
这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.1 [ V; P9 i0 S2 a6 t
48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则
1 G" P7 ?0 K# y3 V4 n缺省是src or dst关键字。6 T4 r' ~. {0 I; v/ S* r6 f
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在
9 }$ a* ]5 T( v4 F; ^+ PFDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e$ A# I! r) g7 t: ^% [ @* t9 o
ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。
6 ?, O/ C W9 u! Z, v其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会* F- M( o2 {, g
监听所有协议的信息包。+ M2 D- o x& |8 K5 x; |) E. {
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,% O, ~4 E; z/ t+ I* Y( K
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
" q% u( E' A2 zr' ,'||';
2 e: F! Y w- X3 `2 U- S ? 这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来
% }0 O- r, B/ a4 j$ a说明。- q, [. p* S8 l" o( o4 h s6 g
(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
( l7 h: U" u" q2 L! V #tcpdump host 210.27.48.1
! B) R$ \5 B4 Q4 T' |9 m (2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令 v6 K( T$ V' R! z7 @5 @ [
:(在命令行中适用 括号时,一定要
. ^) ?7 d" M l% \, H' `6 a #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) 6 z [/ b% n8 N J, \
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包3 w' }" q/ D3 L$ _% q3 J
,使用命令:
! J! q, f' i$ K+ d! _5 z) ~, X #tcpdump ip host 210.27.48.1 and ! 210.27.48.2
/ u* n4 ^+ p5 `& t (4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
/ A' D$ }( s1 d t" W #tcpdump tcp port 23 host 210.27.48.1 * G: i* g6 Y- l, v7 y
3. tcpdump 的输出结果介绍
- ]0 F/ a; Q' V! G5 C1 ? 下面我们介绍几种典型的tcpdump命令的输出信息
2 g3 r' V( l2 \8 m* a" C (1) 数据链路层头信息
' m* L$ ]2 {9 S 使用命令#tcpdump --e host ice2 B2 G0 q( [- G) O6 h( Y3 T
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A7 H1 M# x% m% @7 [
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条
+ i( O; V2 h% g命令的输出结果如下所示:$ l/ K) i- H) r0 ]3 {4 q& e
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.
' k p& {! ?' l' w) ctelne
5 R' O% U7 y4 x% rt 0:0(0) ack 22535 win 8760 (DF)
# K8 ~1 T& C$ i0 h, O0 p 分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该
z& u# ^9 G3 I: J数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它
* a$ v7 X& n7 c' I表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的; A# ]/ x0 B+ e$ y
目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.& i- K% `( s9 G4 p7 Z3 U
telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535
1 o0 w5 e0 ?: U- B4 s, s表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760. 2 N6 [$ [' w- B; y/ L: T
(2) ARP包的TCPDUMP输出信息8 z$ B/ h0 F1 G
使用命令#tcpdump arp / R# x8 n3 x' Q# @) i4 I5 l
得到的输出结果是:! d) m- ?/ c3 e2 z5 i
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
" k# u0 M2 O' w. @4 h9 E 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af# e( F$ S) L# x4 J9 R
:1a)
/ Z0 [0 y' |: @' W& K' N8 ~$ J 分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是
$ k- ^' z" s% J% B4 r& t# LARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:5
& I" Q l; m: v9 [8:af:1a是主机ICE的MAC地址。
: H; G! ?6 n9 {% p' t (3) TCP包的输出信息* P9 D$ ]; Q& }% D; G, B* v$ @- H
用TCPDUMP捕获的TCP包的一般输出信息是:3 \- D3 A3 g+ _4 n
src > dst: flags data-seqno ack window urgent options
& { k0 h# M; \9 Y src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F0 [, X0 G2 o4 h. f$ \9 {
IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是
/ J. v. \" q# d- O下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. " k$ S& [' E; D; e9 ^; t) @
Options是选项. , N+ ~+ `0 F( f0 T2 n
(4) UDP包的输出信息
! E* T- ]1 S2 }0 P+ ]/ w 用TCPDUMP捕获的UDP包的一般输出信息是:8 {8 c3 g2 Y1 B
route.port1 > ice.port2: udp lenth
" u) A8 L. G- w2 E# a3 | b( B UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机
) g2 M- O; J2 i/ E5 S) VICE的port2端口,类型是UDP, 包的长度是lenth: I( b P' B' @2 }) Z; u$ n; F
" {6 t1 F/ r- \
, U5 o# }4 A; B
; b* t9 ^, M q. G |