|
TCPDUMP命令详解
' f1 \3 J" r' x k# J0 a& \
$ G( N' M1 @) J7 n0 P. J工作中一直在用tcpdump,感觉非常方便,今天心血来潮百度了一下tcpdump的用法,才发现原来还有这么多强大的功能自己都不知道,那叫一个汗啊。0 M3 u5 ?3 t6 I _9 ^
! b% v( B, f) ~! i9 J& m以此文作为备份,记录一些新知道的用法,各位网友谁有新的用法,也可以及时告知我进行补充,一起丰富,哈哈! www.2cto.com
, J- ~9 g9 t7 b/ Y + m) r U( L" y* k c" Y
本人邮箱:rick1026zhang@gmail.com
' P+ f0 w% }9 x1 q 6 z5 G8 ]* c& P5 [5 {
废话不多说,切入正题。命令及解释用红色字体,命令所需参数的参数值用斜体标示。 m: _- Z# E7 o8 Z# G
" W! u7 h8 _/ A9 T) i+ J- [' K& j* k先来看一个比较基本的用法:1 ~( A" t6 S. b+ l
6 T& w' U) d; \% Q" M8 z* P+ ]0 Ztcpdump -i eth0
+ }$ H* _8 u( ? 3 H x E, L& a' v" v6 Y4 Z
其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦。
# l1 F6 b' u9 @$ C- a3 `4 s
) t. i5 Q3 H: ^4 w5 X) S5 ctcpdump支持很多的关键字,下面先看几个例子:# P6 ~4 Q. Z# R( g/ w
/ Z; |( L4 A' T/ d% g+ x
(例1)tcpdump -i eth0 host 192.168.0.250 -----在网口eth0上抓取主机地址为192.168.0.250的所有数据包。
) H7 k) W/ {- l( h9 k8 h
0 B$ h0 U9 `0 F$ R( p, {(例2)tcpdump -i eth0 net 192.168.0.0/24 ------ 在网口eth0上抓取网络地址为192.168.0.0/24的所有数据包
& V9 z" S& d) z; {
8 W& I9 h5 z5 K6 I, o$ N4 ?! C# E(例3)tcpdump -i eth0 port 80 ------ 在网口eth0上抓取端口为80的所有数据包(注意,这里不区分是源端口还是目的端口)4 Y) D7 P( q9 T1 I; B- M; t
5 c4 \$ e4 F0 f
当然,我们也可以指定源端口或目的端口2 H( h6 L {/ s' b" W ^/ ?
www.2cto.com
7 N$ z0 g3 I3 j% U* g- B(例4)tcpdump -i eth0 src port 80 and dst port6100 --- 在网口eth0上抓取源端口为80且目的端口为6100的数据包,这里用到了and逻辑运算符,后面再介绍
& U+ {9 P f! w1 r( s ' s U5 c2 _2 s2 i' p8 s
(例5)tcpdump -i eth0 icmp --- 在网口eth0上抓取所有icmp协议的数据包9 q1 G0 _$ o8 ]8 |: F( X% X' D
- D$ s6 z+ u0 `4 b# l! {6 \+ E+ J
以上几个例子,可以大致体现出tcpdump的基本用法。
8 ]+ p3 }! p( D: J
" A: N% H: C C9 o8 p实际上,tcpdump主要包括三种类型的关键字,第一种是关于类型的关键字,主要包括host,net,port,如上面的例(1)(2)(3),第二种
* n, {9 t+ w; X4 e) p 1 E6 k: R- s3 L, a
是确定传输方向的关键字,主要包括src,dst,src or dst,src and dst,这些关键字指明了传输的方向,如上面的例(4)。第三种是协议关键字,包括fddi,ip,arp,
4 F- n7 ?+ V/ X7 y( Q: P) V# t
# s- D$ G$ `7 E, b2 Erarp,tcp,udp,imcp等,如上面的例(5)。
, C5 B: d; l @+ n) R
6 p e# X7 S2 E除了这三种类型的关键字外,还有其他重要的关键字,如:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是'not'、'!',与运算符是'and'、'&&'、
% {9 G3 g. `" |4 e, l3 p % Q3 F: J. [$ w9 t4 h# a6 _+ e
或运算符是'or'、'||',这些关键字可以组合起来构成强大的组合条件来满足我们的需求。
9 `& |6 ? f2 s F0 g( c6 g: {) A / v2 O+ E& m+ P4 \
先看看tcpdump的具体参数及意义:
+ C# |7 P7 f6 U' Q3 e , X' p% u9 g! x) z
-i:指定tcpdump监听的网络接口
3 \3 m, _/ X& y1 A9 \+ V$ l
; _ M9 Y; W6 n3 j/ Z2 ]-s:指定要监听数据包的长度 www.2cto.com
- y" c# K3 S6 A" N! N
4 M* I! w2 a9 G9 _-c:指定要监听的数据包数量,达到指定数量后自动停止抓包. N: k, j1 H/ q
- m6 U5 l f2 n% N-w:指定将监听到的数据包写入文件中保存0 `* O& b3 C0 s9 C: w9 j( S
9 m1 h9 y5 a4 n-A:指定将每个监听到的数据包以ACSII可见字符打印4 D& X- d6 @, E, S2 m& O
% Z: g' {9 @; c' Q; D1 r" }0 W-n:指定将每个监听到数据包中的域名转换成IP地址后显示! B1 i* e+ E" N" A* p( X
, a( y$ V5 R' o6 ^* q
-nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
" }, `8 ^% R I5 ?6 H" ?4 V0 f
* E, {9 \2 f$ M% }: U) v1 A. c-e:指定将监听到的数据包链路层的信息打印出来,包括源mac和目的mac,以及网络层的协议! f- z4 q: M' Q7 u
1 x; Q/ i" X1 y# ?
-p:将网卡设置为非混杂模式,不能与host或broadcast一起使用
$ h4 P1 K/ O" r1 y ~+ h # S9 G ?0 e; i8 C/ M
-r:指定从某个文件中读取数据包
" i6 f" `6 u4 |6 \2 g + R9 d3 e0 o W5 W' i) h2 q" G: K( _
-S:指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号
/ W* n( I, u" Q, ]$ n8 M! c( r
) f4 D K+ O$ a. A/ KOK,参数介绍先到这里,下面看几个具体例子 www.2cto.com
# l/ S2 B3 A# {3 Q
0 T1 S9 ^$ R$ j1 V& m, \9 R5 }tcpdump -i eth0 -s 1400 -nn host 192.168.0.250 and ! 192.168.0.74 and icmp -e
3 F3 a v! }1 o) v" c; O 7 o' a$ K& j$ ?$ S
抓取网口eth0上192.168.0.250与除192.168.0.74外的其他主机之间的icmp报文
# Y- M( f' b Q* V, j
2 B1 e3 p: {# b% w" r) f! z% m7 jtcpdump -i eth0 -s 1400 -nn tcp and \(host 192.168.0.250 and ! 192.168.0.74\)
n- Z1 q- m, n% I* j2 ~; s 6 h0 n ~/ X% b s9 b
抓取网口eth0上192.168.0.250与除192.168.0.74外的所有tcp数据包,这里用到了括号,注意,在tcpdump中使用括号时必须用转义。9 x B( U1 O- L% k6 x+ E9 M, k
# o0 B# a* Y$ u+ s! I4 y
tcpdump -i eth0 ether src or dst 00:21:85:6C9:A3% W, t1 B6 t' ^5 S
! y- n0 q, a2 a2 q抓取网口eth0上源mac地址或目的mac地址为00:21:85:6C9:A3的所有数据包,注意,这里的mac地址格式必须以':'分隔。 3 A* ^4 A/ R! l! a6 \6 h. {
+ a2 ?* K1 h" Z: r- C
|