您的位置:首页 > 理论基础 > 计算机网络

tcpdump 使用手册

2009-07-10 14:47 267 查看
[前语]最近要用到数据包分析软件(tcpdump),从网上搜索发现资料重多,但让我发现大部分的内容都比较乱,让人不敢往下读,今天我也将我整理的资料,拿给网上的朋友分享下,可能我整理得也比较乱,或者分析得有误,请大家指出,谢谢!~

[内容]

Tcpdump[/b]
[/b]

SYNOPSIS([/b]概要)[/b]

tcpdump [ -ADeflnNqtvx ] [ -c count ]

[ -i interface ] [ -r file ] [ -s
snaplen ]

[ -T type ] [ -w file ] [ expression ]

选项 (OPTIONS)[/b]

-A

Print each packet (minus its link level header) in ASCII. Handy for capturing web pages

[应用] 在网关服务器中输入:tcpdump
–A src host 192.168.x.y
[摘取]17:10:56.934040 IP 192.168.x.y.icp >
by2msg1231711.mixer.edge.messenger.live.com.msnp: . ack 4165501895 win 64719
E..(..@...qF.......+.X.G...v.H..P....]........
[分析]以ASCII格式打印除链路层的头部信息的包,这个选项更有益与web页面的抓取.上面是我对源192.168.x.y包的抓取,一看就知道,它现在连接到MSN。
-e

每行都显示链路层报头.
[应用] tcpdump -e src host
192.168.x.y
[摘取]17:19:57.718466 00:14:22:d2:9e:d0 (oui Unknown) >
00:c0:9f:40:29:6a (oui Unknown), ethertype IPv4 (0x0800),
length 60: 192.168.x.y.acp-conduit > 65.54.167.59.http: R
2561727994:2561727994(0) ack 425901151 win 0
[分析]这是针对链路层包分析,看看是不是你想要的呢?
-c

当收到count个 报文 后 退出.
[应用] tcpdump -e -c 2 src host
192.168.x.y
[摘取]
listening on eth0, link-type EN10MB (Ethernet), capture
size 96 bytes
13:54:15.963937 IP 192.168.x.y.ridgeway2 >
218.93.16.107.http: F 1728282061:1728282061(0) ack 2139349129 win 65004
13:54:15.965416 IP 192.168.x.y.gwen-sonya >
218.93.16.107.http: S 3089588305:3089588305(0) win 65535 <mss
1460,nop,nop,sackOK>
2 packets captured
7 packets received by filter
0 packets dropped by kernel
[分析] 看到没有,我只要抓取两个匹配包,就OK了。

-D Print the
list of the network interfaces available on the
system and on which tcpdump can
capture
packets. For each network interface, a
number and an interface name,
possibly followed by a
text description of the interface, is printed.
The interface name or the number
can be supplied to the -i flag to specify an interface on which to capture

[应用] tcpdump -D
[摘取]
1.eth0
2.eth1
3.eth2
4.any (Pseudo-device that captures on all interfaces)
5.lo
[分析]打印可以被tcpdump抓取的接口名称。可以提供给-i参数,EX:tcpdump –I eth1
-i

监听interface接口. 如果不指定接口, tcpdump在系统的接口清单中, 寻找号码最小, 已经配置好的接口(loopback 除外). 选中的时候会中断连接.
[应用] tcpdump –i eth0 ip src
192.168.x.y
[摘取]
14:01:15.700262 IP 218.83.12.11.32785 >
ns-pd.online.sh.cn.domain: 29083+ PTR?
20.152.83.218.in-addr.arpa. (44)
[分析]抓取eth0接口的数据包

-f

用数字形式显示 '外部的' 互联网地址, 而不是字符形式 (如:tcpdump
-f -i eth0 -c 4 src host 192.168.x.y)
[应用]tcpdump -i eth1 –f
[摘取] 14:03:25.655826 IP 207.46.124.244.msnp > 218.83.12.11.kpop: P
259:847(588) ack 1 win 64158
[分析]与前一个应用对比,你能发现在摘取中的互联网地址都会以IP显示,而不在有域名啦。。。

-l

行缓冲标准输出. 可用于捕捉数据的同时查看数据. 例如,
[应用] tcpdump -i eth1 -f -l|tee tcpdump.log
[摘取]
tcpdump: verbose output suppressed, use -v or -vv for
full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture
size 96 bytes
14:11:57.582718
14:11:58.058394 802.1d config 81b6.00:1e:14:9f:f7:00.801a root 8000.00:04:80:78:c0:dd pathcost 19 age 1
max 20 hello 2 fdelay 15
[分析]结合系统命令,使抓取分析数据更加灵活与强大,我爱这个功能…

-n

不把地址转换成名字 (如主机地址, 端口号等)
[应用] tcpdump -i eth0 src host 192.168.x.y -n
[摘取]14:17:30.686094 IP 192.168.x.y.10778 >
121.62.99.137.14808: UDP, length 1050

[分析]抓取的数据包不会将数字地址转换成名字
-N
不显示主机名字中的域名部分
[应用] tcpdump -i eth0 src host 192.168.x.y -n
[摘取]14:16:45.824513 IP 192.168.x.y.alias >
by1msg3145607.msnp: . ack 1894015094 win 64827
[分析] 抓取的数据包中不会将域名的部分显示,看by1msg3145607.msnp,典型是省略了很长一段的域名部分(msn的)

-q

快速输出. 显示较少的协议信息, 输出行将短一点点.
[应用] tcpdump -i eth0 src host 192.168.x.y -q
[摘取]14:21:48.669851 IP 192.168.x.y.tgp >
by1msg4082316.phx.gbl.msnp: tcp 0

[分析]打印较短的协议,用与快速分析。
-w

把原始报文存进file, 不分析也不显示. 它们可以以后用 -r 选项显示. 如果 file 是 “-'', 就写到标准输出.(如:tcpdump -e src host 192.168.x.y -w /tmp/tcpdump.log)
-r

从file中读入数据报 (文件是用 -w 选项创建的). 如果 file 是 “-'', 就读标准输入. (如:tcpdump
-e src host 192.168.x.y -r /tmp/tcpdump.log)
[分析]以上-w,-r,的作用是相反的,一个是将抓取的包写入到指定文件,一个是根据上次写入的文件来读取分析。没有上次的-w操作,-r是无法使用的,除非用”-”,不过如果你用more,cat是无法读通这个文件的,不像用”|”,借助tee 可以为以后方便

-t

禁止显示时戳标志.
[应用] tcpdump -i eth0 src host 192.168.x.y -t
[摘要]
IP 192.168.x.y.sonardata > 218.93.16.107.http: . ack
1225435221 win 65535
IP 192.168.x.y.sonardata > 218.93.16.107.http: P
0:907(907) ack 1 win 65535
IP 192.168.x.y.sonardata > 218.93.16.107.http: . ack
208 win 65328
[分析]看下面

-tt

显示未格式化的时戳标志.
[应用] tcpdump -i eth0 src host 192.168.x.y -tt
[摘要]
1247207645.823506 IP 192.168.x.y.isis >
61.172.205.8.msnp: . ack 53 win 64309
1247207645.840496 IP 192.168.x.y.isis >
61.172.205.8.msnp: P 70:74(4) ack 123 win 64239
1247207645.881594 IP 192.168.x.y.isis >
61.172.205.8.msnp: P 74:122(48) ack 123 win 64239
[分析]-t与-tt对比,一看就很清楚了,是时间显示控制和时间格式控制

-v

(稍微多一点) 繁琐的输出. 例如, 显示IP数据报中的生存周期和服务类型.

-vv

更繁琐的输出. 例如, 显示NFS应答报文的附加域.

-x

以十六进制数形式显示每一个报文 (去掉链路层报头后) . 可以显示较小的完整报文

[分析]-v,-vv,-x通过上面的叙述,我想大家试一下,一定就会很明白了,至与那个选项更适合大家,那就是看应用了,我想这些选项也够大家用了吧!~反正够我用了,呵呵!~

expression ([/b]表达式)[/b]

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。



图:Expression的构造
expression由一个或多个原语
(primitive) 组成. 原语通常由一个标识(id,名称或数字)和 标识 前面的一个或多个修饰字(qualifier) 组成. 修饰字有三种不同的类型:

(1)type

类型修饰字指出标识名称或标识数字代表什么类型的东西. 可以使用的类型有host, net 和 port. 例如,
`host foo', `net 128.3', `port 20'. 如果不指定类型修饰字, 就使用
缺省的 host

(2)Direction

方向修饰字指出相对于标识的传输方向 (数据是传入还是传出标识).
可以使用的方向有 src, dst, src or dst 和
src and dst. 例如, `src foo', `dst net 128.3', `src or
dst port ftp-data'. 如果不指定方向修饰字, 就使用缺省的src or dst . 对于 `null' 链路层 (就是说 象 slip 之类的 点到点 协议), 用 inbound和outbound修饰字指定所需的传输方向.

(3)proto

协议修饰字要求匹配指定的协议. 可以使用的协议有:
ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp 和 udp. 例如,ether src foo', `arp net 128.3',
`tcp port 21'. 如果不指定协议修饰字, 就使用所有符合类型的协议. 例如, `src foo' 指
`(ip or arp or rarp) src foo', `net bar' 指 `(ip or arp
or rarp) net bar', `port 53' 指 `(tcp or udp) port 53'.

[`fddi' 实际上 是 `ether' 的 别名; 分析器把它们视为 ``用在指定网络接口上的数据链路层.'' FDDI 报头包含类似于以太协议的源目地址, 而且通常包含 类似于以太协议的报文类型, 因此你可以分析 FDDI 域, 就象分析以太协议一样.
FDDI报头也包含其他域, 但是你不能在过滤器表达式里显式描述.]

作为上述的补充, 有一些特殊的 `原语' 关键字, 它们不同于上面的模式:
gateway, broadcast, less, greater和数学表达式. 这些在后面有叙述.

更复杂的过滤器表达式 可以通过 and, or 和 not 连接原语来组建. 例如, `host foo and not port ftp and not
port ftp-data'. 为了少敲点键, 可以忽略 相同的修饰子. 例如, `tcp dst port ftp or ftp-data or
domain' 实际上 就是 `tcp dst port ftp or tcp dst port
ftp-data or tcp dst port domain'.

允许的 原语 有:

dst host host

如果报文中IP的目的地址域是 host, 则逻辑为真. host既可以是地址, 也可以是主机名.

src host host

如果报文中IP的源地址域 是 host, 则 逻辑
为 真.

host host

如果报文中 IP 的 源地址域或者目的地址域是host, 则逻辑为真. 上面所有的 host 表达式 都可以加上 ip, arp, 或 rarp 关键字做前缀, 就象:

ip host host

如果host是拥有多个IP地址的主机名, 它的每个地址都会被查验.

dst net net

如果报文的IP目的地址属于网络号net, 则逻辑为真.

src net net

如果 报文的 IP 源地址 属于 网络号 net, 则
逻辑为真.

net net

如果报文的IP源地址或目的地址属于网络号 net, 则逻辑为真.

net net mask netmask (如net
192.168.1.0 mask 255.255.255.128)

如果IP地址匹配指定网络掩码(netmask)的net, 则 逻辑为真. 本原语可以用src
或 dst 修饰.

net net/len

如果IP地址匹配指定网络掩码的net, 则逻辑为真, 掩码的有效位宽为len. 本原语可以用src或dst修饰.

dst port port

如果报文是ip/tcp或ip/udp, 并且目的端口是port, 则逻辑为真. port是一个数字, 也可以是 /etc/services 中 说明过的名字(参看tcp(4P)和udp(4P)).
如果使用名字, 则检查端口号和协议. 如果使用数字, 或者有二义的名字, 则只检查端口号
(例如, dst port 513 将显示 tcp/login
的数据 和 udp/who 的数据, 而 port domain 将显示 tcp/domain 和 udp/domain 的数据).

src port port

如果 报文 的 源端口号 是 port, 则 逻辑 为 真.

port port

如果报文的源端口或目的端口是port, 则逻辑为真. 上述的任意一个端口表达式都可以用关键字tcp或udp做前缀,就象:

tcp src port port

它只匹配源端口是port的 TCP 报文.

less length

如果 报文 的 长度 小于等于 length, 则 逻辑 为 真. 它等同于:

len <= length.

greater length

如果报文的长度大于等于 length, 则逻辑为真. 它等同于:

len >= length.

原语可以用下述方法结合使用:

圆括弧括起来的原语和操作符(园括弧在Shell中有特定含义, 所以必须转义).

取反操作 (`!' or `not').

连结操作 (`&&' or `and').

或操作 (`||' or `or').

取反操作有最高优先级. 或操作和连结操作有相同的优先级, 运算时从左到右结合. 注意连结操作需要显式的and算符, 而不是并列放置.

如果给出标识符, 但没给修饰符, 那么暗指最近使用的修饰符. 例如,

not host vs and ace作为 not host vs and host ace的简写形式, 不应该和 not ( host vs or ace )混淆.

tcpdump [/b]的输出结果介绍[/b](OUTPUT
FORMAT)[/b]

下面我们介绍几种典型的tcpdump命令的输出信息
[align=left](1) 数据链路层头信息[/align]
[align=left]使用命令#tcpdump -e host ice[/align]
[align=left]ice 是一台装有linux的主机,她的MAC地址是00:90:27:58:AF:1A[/align]
[align=left]H219是一台装有SOLARIC的SUN工作站,它的MAC地址是08:00:20:79:5B:46;上一条[/align]
[align=left]命令的输出结果如下所示:[/align]
[align=left] [/align]
[align=left]21:50:12.847509 eth0 > 08:00:20:79:5b:46 00:90:27:58:af:1a ip 60: h219.33357 > ice.[/align]
[align=left]telnet 0:0(0) ack 22535 win 8760 (DF)[/align]
分析:21:50:12是显示的时间,
847509是ID号, eth0 >表示从网络接口设备发送数据包(eth0 <表示从网络接口eth0 接受该数据包), 08:00:20:79:5b:46是主机H219的MAC地址,
它表明是从源地址H219发来的数据包.
00:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE
. ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.
telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口.
ack 22535表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.
[align=left] [/align]
[align=left](2) ARP包的TCPDUMP输出信息[/align]
[align=left]使用命令#tcpdump arp[/align]
[align=left]得到的输出结果是:[/align]
22:32:42.802509 eth0 > arp who-has h10 tell ice
(0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply h10 is-at
0:90:27:12:10:66 (0:90:27:58:af:1a)
  分析: 22:32:42是时间戳, 802509是ID号,
eth0 >表明从主机发出该数据包, arp表明是
ARP请求包, who-has h10 tell ice表明是主机ICE请求主机h10的MAC地址。
0:90:27:5
[align=left]8:af:1a是主机ICE的MAC地址。[/align]
[align=left] [/align]
[align=left](3) TCP包的输出信息[/align]
[align=left]用TCPDUMP捕获的TCP包的一般输出信息是:[/align]
[align=left]src > dst: flags data-seqno ack window urgent options[/align]
[align=left]分析:[/align]
[align=left]src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,如:S 是SYN标志, F (F[/align]
[align=left]IN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是[/align]
下次期望的顺序号, window是接收缓存的窗口大小,
urgent表明数据包中是否有紧急指针.
[align=left]Options是选项.[/align]
[align=left] [/align]
[align=left](4) UDP包的输出信息[/align]
[align=left]用TCPDUMP捕获的UDP包的一般输出信息是:[/align]
[align=left]H10.port1 > ice.port2: udp lenth[/align]
[align=left]UDP十分简单,上面的输出行表明从主机h10的port1端口发出的一个UDP数据包到主机[/align]
[align=left]ICE的port2端口,类型是UDP, 包的长度是lenth[/align]
[align=left] [/align]
[align=left]example:[/align]
[align=left] [/align]
[align=left]如果想要获取主机61.151.247.124接收或发出的telnet包,使用如下命令[/align]
tcpdump tcp port 23 and host
61.151.247.124
[align=left]tcpdump -n tcp port 23 and src host 218.83.152.2[/align]
tcpdump -n -w /etc/tcpdump.log tcp port 23 and src host
218.83.152.2
[align=left]tcpdump -r /etc/tcpdump.log[/align]
[align=left]tcpdump -i eth0 -w tcpdump.log[/align]
[align=left]tcpdump -r tcpdump.log[/align]

显示 所有 进出 sundown 的 报文:

tcpdump host sundown

显示helios和hot|ace之间的报文传送:

tcpdump host helios and \( hot or ace \)

显示ace和除了helios 以外的所有主机的IP报文:

tcpdump ip host ace and not helios
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 tcpdump 休闲