|
TCPDUMP命令详解 6 ^$ H% n: Z0 |. e8 ^; g
$ \8 V1 J/ B2 @$ c
工作中一直在用tcpdump,感觉非常方便,今天心血来潮百度了一下tcpdump的用法,才发现原来还有这么多强大的功能自己都不知道,那叫一个汗啊。% W: R" y" n4 U* @# C) q! R1 i; O4 H9 ^
9 ^3 Y! A# V" S- K
以此文作为备份,记录一些新知道的用法,各位网友谁有新的用法,也可以及时告知我进行补充,一起丰富,哈哈! www.2cto.com 3 ]4 i h9 I, E! l# w
% ~8 K$ r+ p& ^: r3 O6 |
本人邮箱:rick1026zhang@gmail.com' q5 P6 X0 f H7 ?2 r8 g
W8 k+ P5 l: |, i2 z% a2 N
废话不多说,切入正题。命令及解释用红色字体,命令所需参数的参数值用斜体标示。( v T i+ v' {8 ]# A" m
- p8 \4 l3 F3 w2 N# o }5 ?
先来看一个比较基本的用法:
7 I X6 W# g! E/ `, X. a 5 @ k- T+ [8 F# G4 o
tcpdump -i eth0
: D7 ^: p! |0 z/ k( m
: T! Y7 c! ^ t' S& F其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦。) K. Z) ~9 ?* h: X1 `& s( |
' x: }* X+ L2 x' q3 Stcpdump支持很多的关键字,下面先看几个例子:
+ ^2 Z: M- K% m
, G. E4 k8 h5 {. D8 @(例1)tcpdump -i eth0 host 192.168.0.250 -----在网口eth0上抓取主机地址为192.168.0.250的所有数据包。7 x! z0 v; [9 q! r7 |5 l7 N7 {
_4 t" J# Q+ }( V' r
(例2)tcpdump -i eth0 net 192.168.0.0/24 ------ 在网口eth0上抓取网络地址为192.168.0.0/24的所有数据包
1 g" a! B! Y4 n) z: @! E; S) d
' F) m( u/ i' e- j, G" J# {0 o(例3)tcpdump -i eth0 port 80 ------ 在网口eth0上抓取端口为80的所有数据包(注意,这里不区分是源端口还是目的端口)
% T" Q7 v$ o3 S* _+ G7 I9 _9 j
5 B( z5 v# U. ?4 a1 X [当然,我们也可以指定源端口或目的端口+ b& C/ t5 b* I: _* O. S& \8 M6 H- m! t
www.2cto.com 1 l. f" R6 K! E8 \ v) v+ v6 H
(例4)tcpdump -i eth0 src port 80 and dst port6100 --- 在网口eth0上抓取源端口为80且目的端口为6100的数据包,这里用到了and逻辑运算符,后面再介绍
; v/ A' m! s: r/ A4 q& Y, v5 ? % x* E1 _0 z) Y6 I& g
(例5)tcpdump -i eth0 icmp --- 在网口eth0上抓取所有icmp协议的数据包
# d2 w7 }# H9 C d& q 7 J0 J3 K2 N o4 c
以上几个例子,可以大致体现出tcpdump的基本用法。
p2 j* S+ W3 K. }& U
( [9 a4 x# C+ a' d' O. G实际上,tcpdump主要包括三种类型的关键字,第一种是关于类型的关键字,主要包括host,net,port,如上面的例(1)(2)(3),第二种9 r. q3 ~) }! v2 Y2 k. }
m3 I! k' m0 D4 d4 c- s" F9 w: y是确定传输方向的关键字,主要包括src,dst,src or dst,src and dst,这些关键字指明了传输的方向,如上面的例(4)。第三种是协议关键字,包括fddi,ip,arp,
5 P$ U+ U* n- u7 k" `) t# H
1 r. Q1 g# Q: H& w1 \8 Prarp,tcp,udp,imcp等,如上面的例(5)。. T7 e# c, ~' k" m( E& R
4 s* ~2 [7 c; Q除了这三种类型的关键字外,还有其他重要的关键字,如:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是'not'、'!',与运算符是'and'、'&&'、$ ]' h y- M7 n$ u h8 e
/ E# {* n- }: J1 L" p u或运算符是'or'、'||',这些关键字可以组合起来构成强大的组合条件来满足我们的需求。
) I/ p2 t: y+ I) } w' s* P
) k6 u# u' o# }/ X `先看看tcpdump的具体参数及意义:& [9 Y3 m' O9 E+ ^& q
2 F: }9 v1 ~7 O& d j7 V-i:指定tcpdump监听的网络接口6 T" {) }- G) b+ @7 y9 Z( {1 H
, l9 f# _( g4 J0 s# m. N-s:指定要监听数据包的长度 www.2cto.com
1 t! J T6 o7 }' c0 }; ]+ x
8 N' c2 f) X. J6 L-c:指定要监听的数据包数量,达到指定数量后自动停止抓包
6 }7 u! a$ p$ } l
; p. v c& d7 }! q" E1 s( E-w:指定将监听到的数据包写入文件中保存
% ^, {' z4 `: L1 q2 R1 s" w: V , y9 ^4 a# _8 S+ [& t7 h+ z |
-A:指定将每个监听到的数据包以ACSII可见字符打印
# I6 q3 u# |9 n. X7 D/ e4 { ; f% ^, T. _; p. U7 g4 Q
-n:指定将每个监听到数据包中的域名转换成IP地址后显示
* \% L* D1 }4 K; G/ j
2 L' g) U$ L! ?7 {4 ~* n-nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
+ Z* R3 A/ d6 k9 ], t B q " }( ]- k9 R3 }9 }* M6 N; e! g
-e:指定将监听到的数据包链路层的信息打印出来,包括源mac和目的mac,以及网络层的协议6 X) u1 w |; W* _# y. v
2 w' I) d; g2 o-p:将网卡设置为非混杂模式,不能与host或broadcast一起使用 [6 B2 h, A2 ]
% ]# i, Z& y" O% |, C$ `6 \2 B+ k
-r:指定从某个文件中读取数据包% E# e% T3 H8 P! ?9 s
. F* |* Y) P: I x-S:指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号1 L: R6 b0 v' }3 P
9 p& k* J, g9 Z+ O8 O
OK,参数介绍先到这里,下面看几个具体例子 www.2cto.com
! ^$ i# F& r& x8 `6 N ) e1 Z6 g b3 r! ]
tcpdump -i eth0 -s 1400 -nn host 192.168.0.250 and ! 192.168.0.74 and icmp -e
h5 n$ H* Y& b" w4 e 4 r; e3 a _" }3 q" {
抓取网口eth0上192.168.0.250与除192.168.0.74外的其他主机之间的icmp报文" x& i8 U5 }, J& s
3 A" g- j: x2 {' x" ~2 a, e& qtcpdump -i eth0 -s 1400 -nn tcp and \(host 192.168.0.250 and ! 192.168.0.74\)
5 u( @3 @" _3 R+ ~' r; l4 K 8 I, U7 M6 L9 ]( b
抓取网口eth0上192.168.0.250与除192.168.0.74外的所有tcp数据包,这里用到了括号,注意,在tcpdump中使用括号时必须用转义。
( j4 r9 O1 m' V2 \3 z - D R7 v% y$ c! B0 q5 \1 N
tcpdump -i eth0 ether src or dst 00:21:85:6C9:A3
" s5 V L+ |4 v( T & Z. ?: o4 R3 i* `' `6 x
抓取网口eth0上源mac地址或目的mac地址为00:21:85:6C9:A3的所有数据包,注意,这里的mac地址格式必须以':'分隔。 $ P1 \) T( t* l# n
5 P+ r; `- m @+ A6 X L |