分享

Tcpdump使用方法

 忧郁_小刚 2012-06-05
Tcpdump 的用法
2011-05-26 20:34

1. tcpdump -D 获取网络适配器列表,以下是在windows上获取到的结果:

1.\Device\PssdkLoopback (PSSDK Loopback Ethernet Emulation Adapter)
2.\Device\{CF587901-C85F-4FD6-896F-D977DEFE76EC} (Intel(R) PRO/100 VE Network Co
nnection)

2. tcpdump -i <需要监控的网络适配器编号>,例如我想监控lo(127.0.0.1),即上面列表中的1.\Device\PssdkLoopback: (windows上特有的,linux不适用)

tcpdump -i 1

如果不使用-i来定义监控适配器的话,默认使用列表中的第一个;

3. 监控主机为192.9.200.59上8000端口的tcp协议

tcpdump host 192.9.200.59 and tcp port 8000

4. 如果想要显示数据包的内容,需要使用-X参数,如,我想要显示捕获的http数据包http header的内容:

tcpdump -X host 192.9.200.59 and tcp port 8000

显示结果如下:

22:13:19.717472 IP testhost59.12535 > liujuan59.8000: . 1:330(329) ack 1 win 327
8
0x0000: 4500 0171 e616 0000 8006 cb2b 0000 0000 E..q.......+....
0x0010: c009 c83b 30f7 1f40 0000 0002 0000 0002 ...;0..@........
0x0020: 5010 8000 b066 0000 504f 5354 202f 2048 P....f..POST./.H
0x0030: 5454 502f 312e 310d 0a43 6f6e 7465 6e74 TTP/1.1..Content
0x0040: 2d54 7970 653a 2074 6578 742f 786d 6c3b -Type:.text/xml;
0x0050: 2063 .c

可以看到该结果只显示了http头的一部分,没有显示全,是因为tcpdump默认将显示的数据长度截断了,可以使用-s后面加数据长度,来设置数据显示长度:

tcpdump -X -s 0 host 192.9.200.59 and tcp port 8000

以上的例子中,-s 0 表示自动设置长度使其能够显示所有数据。

5. 捕获的数据太多,不断刷屏,可能需要将数据内容记录到文件里,需要使用-w参数

tcpdump -X -s 0 -w aaa host 192.9.200.59 and tcp port 8000

则将之前显示在屏幕中的内容,写入tcpdump可执行文件同级目录下的aaa文件中。

文件查看方式如下,需要使用-r参数:

tcpdump -X -s 0 -r aaa host 192.9.200.59 and tcp port 8000

如果这样写:

tcpdump -r aaa

则只能看到最简单的数据传输交互过程,看不到数据包内容,查看时也需要使用相应的参数。

6.总结

总结一下,tcpdump的参数分两个部分,选项(Options)和表达式(expression):

tcpdump[-adeflnNOpqRStuvxX] [-ccount]
[-Cfile_size] [-Ffile]
[-iinterface] [-mmodule] [-rfile]
[-ssnaplen] [-Ttype] [-wfile]
[-Ealgo:secret] [expression]

 

=======================================

tcpdumpLinux下自带的网络分析工具。可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供andornot等逻辑语句来帮助你去掉无用的信息。

tcpdump主要选项

类型
host, net, port
 
方向
src, dst, src or   dst, src and dst

协议
ip, tcp, udp,   arp, rarp, ether, fddi

逻辑
and, or, not 或者 &&, ||, !

选项
-i指定网卡, -n显示ip, -A文本显示
-c抓包数, -x/-xx/-X/-XX二进制显示, -r读, -w写
 
类型
host指定主机或目的地址。
net制定网络地址。net可以用来指定子网。
port指定监听端口。
如果要制定多种类型,用逻辑运算符号连接。
tcpdump net 192.168.1。监听子网192.168.1.0
tcpdump net 192.168.1.0/24
tcpdump host 192.168.1.124 and port 80。监听指定主机的80端口。
 
 
方向
 
src指定源地址,dst指定目的地址。
 
监听来自192.168.1.10 或 192.168.1.11的80端口:
 
tcpdump port 80 and \(src 192.168.1.10 or src 192.168.1.11\)
 
 
协议
用来捕获特定协议的数据包有:ether(ethernet), tcp, udp, icmp, ip, ip6(ipv6), arp, rarp(reverse arp)等。
 
 
逻辑
tcpdump port 80 and \(host 192.168.1.10 or host 192.168.1.11\)。监听主机192.168.1.10 或 192.168.1.11的80端口。
 
使用()一定要用\转义。
 
获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包:
 
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
 
 
 
选项
 
-i:指定网卡。
 
-n:显示ip,而不是主机名。
 
-c:指定抓多少个包后退出。
 
-A:以ASCII方式显示包内容,这个选项对文本格式的协议包非常有用。
 
-s:指定抓包显示一行的宽度,-s0表示显示完整的包,经常和-A一起用。
 
-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册。
 
-vv:详细信息。
 
-r:从文件中读取。
 
-w:导出到指定文件。
 
监听来自172.25.38.145到端口7012的数据,并到处到指定文件:
 
tcpdump tcp dst port 7012 and src host 172.25.38.145 -vv –w output.dat
 
从指定文件加载监听数据:
 
tcpdump -r output.dat
 
监听网卡eth1端口7012的数据:
 
tcpdump tcp port 7012 -ieth1 –n
 
 
 
用tcpdump解析tcp连接建立和释放
 
下面命令抓包:
 
# tcpdump tcp port 7012 and host 172.25.34.88 -ieth1 -n
 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
 
 
 
1.          14:44:52.174122 IP 172.25.38.145.49563 > 172.25.34.88.7012: S 1986599379:1986599379(0) win 5840 <mss 1460,sackOK,timestamp 3824018401 0,nop,wscale 2>
 
2.          14:44:52.174249 IP 172.25.34.88.7012 > 172.25.38.145.49563: S 4294961892:4294961892(0) ack 1986599380 win 5792 <mss 1460,sackOK,timestamp 1927787323 3824018401,nop,wscale 2>
 
3.          14:44:52.174228 IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>
 
4.          14:44:52.174433 IP 172.25.38.145.49563 > 172.25.34.88.7012: P 1:109(108) ack 1 win 1460 <nop,nop,timestamp 3824018401 1927787323>
 
5.          14:44:52.174443 IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 109 win 1448 <nop,nop,timestamp 1927787323 3824018401>
 
6.          14:44:52.186891 IP 172.25.34.88.7012 > 172.25.38.145.49563: P 1:857(856) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>
 
7.          14:44:52.186914 IP 172.25.34.88.7012 > 172.25.38.145.49563: F 857:857(0) ack 109 win 1448 <nop,nop,timestamp 1927787326 3824018401>
 
8.          14:44:52.187054 IP 172.25.38.145.49563 > 172.25.34.88.7012: . ack 857 win 1888 <nop,nop,timestamp 3824018404 1927787326>
 
9.          14:44:52.195347 IP 172.25.38.145.49563 > 172.25.34.88.7012: F 109:109(0) ack 858 win 1888 <nop,nop,timestamp 3824018406 1927787326>
 
10.       14:44:52.195355 IP 172.25.34.88.7012 > 172.25.38.145.49563: . ack 110 win 1448 <nop,nop,timestamp 1927787328 3824018406>
 
 
 
每一行中间都有这个包所携带的标志:
 
S=SYN,发起连接标志。
 
P=PUSH,传送数据标志。
 
F=FIN,关闭连接标志。
 
ack    表示确认包。
 
RST=RESET,异常关闭连接。
 
. 表示没有任何标志。
 
 
 
上面抓包的过程解析:
 
第1行:14:44:52这个时间,从172.25.38.145(client)的临时端口49563向172.25.34.88(server)的7012监听端口发起连接,client初始包序号为1986599379,滑动窗口大小为5840字节(滑动窗口即tcp接收缓冲区的大小,用于tcp拥塞控制),mss大小为1460(即可接收的最大包长度,通常为MTU减40字节,IP头和TCP头各20字节)。
 
第2行:server响应连接,同时带上第一个包的ack信息,为client端的初始包序号加1,即1986599380,即server端下次等待接受这个包序号的包,用于tcp字节流的顺序控制。Server端的初始包序号为4294961892,mss也是1460。
 
第3行:client再次确认,tcp连接三次握手完成。
 
第4行:client发请求包,包长度108字节。
 
第5行:server响应ack。
 
第6行:server回包,包长度856字节。
 
第7行:client响应ack。
 
第8行:client发起关闭连接请求。
 
第9行:server响应ack,并且也发送FIN标志关闭。
 
第10行:客户端响应ack,关闭连接的四次握手完成。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nellson/archive/2010/07/30/5775530.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多