Linux系统之Tcpdump抓包法

写在前面的话

其实博客写道这个份儿上,就觉得运维之路就像武侠小说里的主人公升级。每学到一个软件就像得到一本武功秘籍,但是武功也有高低和粗细之分。高低在一定程度上表现在年薪上,而粗细就表现在对各种软件及指令的熟悉程度和参数了解程度上。把一门武功练细练透,也能行走江湖。

Tcpdump的应用举例

# tcpdump -i eth0 -nn -X ‘port 53’ -c 1

-nn选项:
意思是说当tcpdump遇到协议号或端口号时,不要将这些号码转换成对应的协议名称或端口名称。比如,众所周知21端口是FTP端口,我们希望显示21,而非tcpdump自作聪明的将它显示成FTP。

-X选项:
告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。

‘port 53’:
这是告诉tcpdump不要看到啥就显示啥。我们只关心源端口或目的端口是53的数据包,其他的数据包别给我显示出来。

-c选项:
是Count的含义,这设置了我们希望tcpdump帮我们抓几个包。我设置的是1,所以tcpdump不会帮我再多抓哪怕一个包回来。

【-e选项】- 增加以太网帧头部信息输出,显示mac地址和传输type

【-l选项】- 使得输出变为行缓冲,不会ctrl+x截半截的数据

【-t选项】- 输出时不打印时间戳

【-v选项】- 输出更详细的信息.加了-v选项之后,在原有输出的基础之上,你还会看到tos值、ttl值、ID值、总长度、校验值等。

【-F选项】- 指定过滤表达式所在的文件
比如tcpdump -i eth0 -nn -X ‘port 53′ -c 1

可以先建立一个文件叫111.txt,里面的内容就是port 53

然后#tcpdump -i eth0 -nn -X -F 111.txt -c 1 效果跟上面的语句是一样的。
一般来说当过滤的条件比较复杂而且要重复利用的时候,就会-F,省事儿。

【-w选项】- 将流量保存到文件中。

#tcpdump -c 10 -nn -X -F 111.txt -w 222.txt

tcpdump的-w方式是把raw packets(原始网络包)直接存储到文件中了,也就是存储的都是结构体形式,而非是分析之后的文本格式的信息,因此大家是无法直接通过less命令查看的。

【-r选项】- 读取raw packets文件
#tcpdump -r 222.txt

【我只想抓UDP的包,不想被TCP的包打扰】:# tcpdump -i eth0 -c 10 'udp'

【我想专门查看这个源机器和那个目的机器之间的网络包,不想被其他无关的机器打扰】:# tcpdump -i eth0 'dst 8.8.8.8'

【我只想查目标机器端口是53或80的网络包,其他端口的我不关注】:# tcpdump -i eth0 -c 3 'dst port 53 or dst port 80'

tcpdump还支持如下的类型:
1 host:指定主机名或IP地址,例如’host roclinux.cn’或’host 202.112.18.34′
2 net :指定网络段,例如’arp net 128.3’或’dst net 128.3′
3 portrange:指定端口区域,例如’src or dst portrange 6000-6008′

【例子1】- 我想抓到那些通过eth0网卡的,且来源是roclinux.cn服务器或者目标是roclinux.cn服务器的网络包
tcpdump -i eth0 'host roclinux.cn'

【例子2】- 我想抓通过eth0网卡的,且roclinux.cn和baidu.com之间通讯的网络包,或者,roclinux.cn和qiyi.com之间通讯的网络包
tcpdump -i eth0 'host roclinux.cn and (baidu.com or qiyi.com)'

【例子3】- 我想获取使用ftp端口和ftp数据端口的网络包
tcpdump 'port ftp or ftp-data'

【例子5】- 打印IP包长超过576字节的网络包
tcpdump 'ip[2:2] > 576'


原文地址:http://roclinux.cn/?p=2820

拓展阅读:http://www.cnblogs.com/maifengqiang/p/3863168.html

你可能感兴趣的:(tcpdump)