|
TCPDUMP命令详解 ' t: w- Y( C: B2 b
/ ~& U2 g6 r0 N, \3 M工作中一直在用tcpdump,感觉非常方便,今天心血来潮百度了一下tcpdump的用法,才发现原来还有这么多强大的功能自己都不知道,那叫一个汗啊。
; u2 x; N' S' q! L4 q: a
$ H: ^* v h" h' n3 p: b以此文作为备份,记录一些新知道的用法,各位网友谁有新的用法,也可以及时告知我进行补充,一起丰富,哈哈! www.2cto.com 5 m' B% x8 K% b/ K8 |$ ~' X
1 r+ V; F* n5 ~1 n3 u) @4 X8 l
本人邮箱:rick1026zhang@gmail.com! v0 P2 F2 [' f: e. E2 b
" ~5 V: R7 s! l: K
废话不多说,切入正题。命令及解释用红色字体,命令所需参数的参数值用斜体标示。* q9 a$ A' ~# T9 h7 H
: i! Q. ?0 }3 I- }4 ~先来看一个比较基本的用法:
8 }9 @! H5 q) [& ~! {1 w" ]4 H
5 L+ { u2 ]- { Otcpdump -i eth0 8 y. q6 S8 M2 n4 g4 Z# ]
: w9 i3 `( X. F其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦。
7 z5 `3 |' [& z4 t# E: J& x 9 |' L+ ]& o1 C( V- i
tcpdump支持很多的关键字,下面先看几个例子:
& x! A2 i" E/ H* l6 Y9 S: |" {% _; ^- K & p( x! @1 p3 e8 E0 o
(例1)tcpdump -i eth0 host 192.168.0.250 -----在网口eth0上抓取主机地址为192.168.0.250的所有数据包。
. H5 s8 J1 {, n; {1 |7 n8 f
/ Y* J) L6 W4 ? j1 ]! V5 p" k(例2)tcpdump -i eth0 net 192.168.0.0/24 ------ 在网口eth0上抓取网络地址为192.168.0.0/24的所有数据包: o( `: E/ C' g# B& W
% ]$ B W3 `* s* v. S5 P5 N- X(例3)tcpdump -i eth0 port 80 ------ 在网口eth0上抓取端口为80的所有数据包(注意,这里不区分是源端口还是目的端口); f) ^& \5 i3 D5 u# r! b* M
! z% ~1 \& M) g当然,我们也可以指定源端口或目的端口
; g) d5 Y# Q, B/ D1 r& W8 ~, e9 k www.2cto.com
, P0 r! F% u$ Z1 o% \! u(例4)tcpdump -i eth0 src port 80 and dst port6100 --- 在网口eth0上抓取源端口为80且目的端口为6100的数据包,这里用到了and逻辑运算符,后面再介绍: i6 u: s% J j
6 W' W3 t; k: w" k
(例5)tcpdump -i eth0 icmp --- 在网口eth0上抓取所有icmp协议的数据包
4 S+ d4 B. j' B6 u: Y# K4 {
) M8 x) A1 {' w0 U& ]以上几个例子,可以大致体现出tcpdump的基本用法。; w: {, ?( t S9 I5 {
/ A" L$ u: b) x+ `4 [
实际上,tcpdump主要包括三种类型的关键字,第一种是关于类型的关键字,主要包括host,net,port,如上面的例(1)(2)(3),第二种
2 e* W# [7 x7 b B
+ r6 @+ h6 B' q# m是确定传输方向的关键字,主要包括src,dst,src or dst,src and dst,这些关键字指明了传输的方向,如上面的例(4)。第三种是协议关键字,包括fddi,ip,arp,
; Q9 L6 ]# p; ~3 y# L3 i/ c& P + A0 M4 ~ z5 c; A9 e0 ^& ^
rarp,tcp,udp,imcp等,如上面的例(5)。, f: Y6 w/ _0 F5 _- Q
; k3 ?$ C& x$ q5 _# F. D# i除了这三种类型的关键字外,还有其他重要的关键字,如:gateway,broadcast,less,greater,还有三种逻辑运算,取非运算是'not'、'!',与运算符是'and'、'&&'、
* g" f/ `! z" o( U% E
6 M( |( T) B; Q或运算符是'or'、'||',这些关键字可以组合起来构成强大的组合条件来满足我们的需求。4 s! `4 z. j$ ]/ x
8 `5 K1 e0 i! \. |% ?% ]
先看看tcpdump的具体参数及意义:
3 q. G4 G( ^# c _
9 A7 M o3 o" s' ]1 m" x; `; d! R$ n6 c& S-i:指定tcpdump监听的网络接口. l4 |) f8 g2 o# p! Q0 p9 ]+ [
5 i$ x; u8 ?# X% t u-s:指定要监听数据包的长度 www.2cto.com
5 ?7 v L/ u2 k) y& z5 o: P : W' k# c% \ ~6 q
-c:指定要监听的数据包数量,达到指定数量后自动停止抓包
- z$ T( A; l6 I% E5 t" [
b- Q/ F' t* v2 e% [* C* Z-w:指定将监听到的数据包写入文件中保存& l2 M/ y' v5 b0 z% V( u
; i% C5 m) `+ g2 e4 m6 Q
-A:指定将每个监听到的数据包以ACSII可见字符打印
+ X7 D8 W% x3 Y * J5 w; @/ A0 ~3 `
-n:指定将每个监听到数据包中的域名转换成IP地址后显示2 N. @5 z* k7 _+ A% a( n' I7 g& L
9 X1 b- m% o$ A, m
-nn:指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示3 ?0 j. G, g Z) Y- Z
# a4 k/ o+ w+ K' F- U2 T-e:指定将监听到的数据包链路层的信息打印出来,包括源mac和目的mac,以及网络层的协议
0 Q f, W2 A) ]# h- a 0 {' j$ a6 i1 J
-p:将网卡设置为非混杂模式,不能与host或broadcast一起使用
' X: X1 R6 D: n" I0 m9 E) |5 n" H4 [! k - r7 @1 \) F4 e! r
-r:指定从某个文件中读取数据包
# g9 A2 a( f9 w4 o& \- q
+ \3 V# P6 Q' _8 [# i-S:指定打印每个监听到的数据包的TCP绝对序列号而非相对序列号
% @7 `5 J$ B1 t9 w ' t3 m6 L- F" ]$ `$ C$ S
OK,参数介绍先到这里,下面看几个具体例子 www.2cto.com
- @0 ]; J/ ?' }+ X7 P
( p1 R9 b7 l, b2 Dtcpdump -i eth0 -s 1400 -nn host 192.168.0.250 and ! 192.168.0.74 and icmp -e
c. F: @4 @" U" L
* f( m2 K3 G) V) M7 y, {, Z9 u0 X抓取网口eth0上192.168.0.250与除192.168.0.74外的其他主机之间的icmp报文$ v- y. w% ~ J, U5 _+ F. x4 X
% s5 m- P5 ?# p1 Y; H
tcpdump -i eth0 -s 1400 -nn tcp and \(host 192.168.0.250 and ! 192.168.0.74\)
9 J5 d, j; c5 I; w7 B- \
7 Q1 k+ _9 u3 x! x6 D抓取网口eth0上192.168.0.250与除192.168.0.74外的所有tcp数据包,这里用到了括号,注意,在tcpdump中使用括号时必须用转义。
) \* \7 Y2 [* ? v9 u' ^ ! t' u, _" N- @; n1 c+ v
tcpdump -i eth0 ether src or dst 00:21:85:6C9:A3. F$ t& X& ^4 S& S @$ i
5 `0 x$ x% [2 Q+ ~/ v8 o; W/ v抓取网口eth0上源mac地址或目的mac地址为00:21:85:6C9:A3的所有数据包,注意,这里的mac地址格式必须以':'分隔。
, B9 J$ L" q3 a8 k( e+ F J% Z
7 V3 i# E0 Y1 q7 G' _' ]( ]: W: i |