tcpdump采用命令行方式,它的命令格式为IXPUB技术博客(} C0~te`9^_
.Q/M)nj*a^"p7590422
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
C/^7{+RBpv7590422
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
IXPUB技术博客yCg |"P7}O3{
[ -T 类型 ] [ -w 文件名 ] [表达式 ]
IXPUB技术博客2G
D xze$RG
IXPUB技术博客
e&T2UZ$|C%\8TI
1. tcpdump的选项介绍&|Am$Q4`R#^7590422
IXPUB技术博客!i$T6z5E)]#|I.X
-a 将网络地址和广播地址转变成名字;
IXPUB技术博客3AULUh
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
EG~!|'~|1Q6H7590422
-dd 将匹配信息包的代码以c语言程序段的格式给出;
N
@8[.y4lj3a
h7590422
-ddd 将匹配信息包的代码以十进制的形式给出;
M5i/]0Y*Y/YK0X_P4y
F7590422
-e 在输出行打印出数据链路层的头部信息;
IXPUB技术博客"ey)J*F"CQ
-f 将外部的Internet地址以数字的形式打印出来;
IXPUB技术博客^1c.f2E~C4H
-l 使标准输出变为缓冲行形式;
IXPUB技术博客*L#{5v"|Te.h#AY
-n 不把网络地址转换成名字;
IXPUB技术博客5hmW)Zhc&g0g_
-t 在输出的每一行不打印时间戳;
IXPUB技术博客X9kF&Z9X2IF2EH
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
IXPUB技术博客@ThV/n
-vv 输出详细的报文信息;
NU Yp?#A_7590422
-c 在收到指定的包的数目后,tcpdump就会停止;
IXPUB技术博客^6a~kD
-F 从指定的文件中读取表达式,忽略其它的表达式;
IXPUB技术博客%a
`_'O4f-hl
-i 指定监听的网络接口;
IXPUB技术博客%|n8U3S]~#?
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
)n?2u\){)F7590422
-w 直接将包写入文件中,并不分析和打印出来;
z~3Y0DkH7590422
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程
nI(_H/ELM_ pT!O7590422
调用)和snmp(简单 网络管理协议;)
n`E-p.GO7590422
IXPUB技术博客\&qS1f7Lfgpx
IXPUB技术博客(?}S-B1WM2m&l
2. tcpdump的表达式介绍IXPUB技术博客?VpC*\4O~
IXPUB技术博客W{6A0]j;o:HS1[.y|
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表
T)fA s0i5a3x#[G7590422
达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会
IXPUB技术博客$Wn&C)D/@
被截获。
S%uK]:?-cV1NJ7590422
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,
IXPUB技术博客wv
lW"|;s^rH
net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明
IXPUB技术博客;Wl7Wtm
202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是
\Z.WG,K,}7590422
host.
,A0u3c!X\A5J7590422
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,
I8g2T
r)Lg
Q,d*\7590422
这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.
a+Bn9HF7590422
48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则
IXPUB技术博客 k@Mh'K'dK1X$D
缺省是src or dst关键字。
-s#HCW%N.Fs
Tx7590422
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在
/z_ {2E] ` q0X7590422
FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e
'q%_+q
F&b4F,O)}7590422
ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。
oD+H3P+YZh6eY7590422
其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会
/]ay&\IWC7590422
监听所有协议的信息包。
IXPUB技术博客-b [3OHF
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
tLi-nKI7590422
greater,还有三种逻辑运算,取非运算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
v/me5j+h4X7590422
r' ,'||';
3nH3v xr
k7590422
这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来
o@%m!O*cb0O {7590422
说明。
IXPUB技术博客 ? s!mF
f ~k
(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
nfX/X"pota5MBB7590422
#tcpdump host 210.27.48.1
R1@ @Pj'ze[7590422
(2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令
fE%F2Z%z@7590422
:(在命令行中适用 括号时,一定要
IXPUB技术博客(B)G#W1|5V
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
uH.w3rSjBd8WZ k7590422
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
IXPUB技术博客A0Z.rX*p$N
,使用命令:
IXPUB技术博客gDAUZ`;g
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
IXPUB技术博客:h!Rm G+Q
(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
IXPUB技术博客/^U9S*j5f6D{o
#tcpdump tcp port 23 and host 210.27.48.1
_N!iZg&lW+r$S7590422
}.E/eYL7590422
3. tcpdump 的输出结果介绍IXPUB技术博客Jm6|.{;NW4m8k:T;p
p#z5D2Y8Q9j7590422
下面我们介绍几种典型的tcpdump命令的输出信息
oS3\|AI.i7590422
(1) 数据链路层头信息
IXPUB技术博客\/})f3q~@
s$|y
使用命令#tcpdump --e host ice
wf!^4`0CZ;Om7590422
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
IXPUB技术博客AA3r6h`kr
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条
#z.S ]L7hS'q*s7^;J7590422
命令的输出结果如下所示:
#no1Og|!bX4Q7590422
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 >; ice.
IXPUB技术博客s6? N}6Il
h
telne
IXPUB技术博客?WWhYu!h
t 0:0(0) ack 22535 win 8760 (DF)
S
g V%cG-u7590422
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该
IXPUB技术博客 o,Jb-ex:xS
数据包,eth0 >;表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它
9p-R"S#{'zpE:M'^7590422
表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的
{5QD.G4Tl%R7s7590422
目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 >; ice.
IXPUB技术博客j1n5Q%]E"o"{2h
telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535
0^4Z:q
ZsIm7590422
表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.
IXPUB技术博客)]V&z#o$a7g
IXPUB技术博客y5]:_EY^O
(2) ARP包的TCPDUMP输出信息
IXPUB技术博客tO1P%s6{*U2A!FD
使用命令#tcpdump arp
IXPUB技术博客4S"GEU L@
得到的输出结果是:
IXPUB技术博客@/A6I9ryEJ
22:32:42.802509 eth0 >; arp who-has route tell ice (0:90:27:58:af:1a)
.vbp [/e
}.c.pX#V7590422
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af
IXPUB技术博客iR0G+e8x
:1a)
H5a-|5R#@0V1E'c7590422
分析: 22:32:42是时间戳, 802509是ID号, eth0 >;表明从主机发出该数据包, arp表明是
$m:Hv4B \7590422
ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:5
IXPUB技术博客Ze"p
yB
8:af:1a是主机ICE的MAC地址。
7L%n4@{cW7590422
RRNUSY7590422
(3) TCP包的输出信息
IXPUB技术博客mIUH_n p
用TCPDUMP捕获的TCP包的一般输出信息是:
j"~ IQ*E*r7590422
src >; dst: flags data-seqno ack window urgent options
v._D7?D,dl+b4g7590422
src >; dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (F
Q+?mHkbz6Ks:qL7590422
IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是
&\t;fD6LDo7590422
下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针.
IXPUB技术博客Z6] m/?h%}y
Options是选项.
x(MU
{ Z.y'e*t7590422
IXPUB技术博客|K.f^B]hE
(4) UDP包的输出信息
aH6C;f4Wig$hW7590422
用TCPDUMP捕获的UDP包的一般输出信息是:
IXPUB技术博客t$V6}D3C5Q G2PQ$[$IK_
route.port1 >; ice.port2: udp lenth
IXPUB技术博客I:K!Dvr'l
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机
IXPUB技术博客R%l+o%a.M5Y8Ikmil
ICE的port2端口,类型是UDP, 包的长度是lenth