linux tcpdump - yaokun123/php-wiki GitHub Wiki

Linux抓包工具tcpdump

一、简介

在网络问题的调试中,tcpdump应该说是一个必不可少的工具,和大部分linux下优秀工具一样,它的特点就是简单而强大。
它是基于Unix系统的命令行式的数据包嗅探工具,可以抓取流动在网卡上的数据包。

默认情况下,tcpdump不会抓取本机内部通讯的报文。
根据网络协议栈的规定,对于报文,即使是目的地是本机,也需要经过本机的网络协议层,所以本机通讯肯定是通过API进入了内核,
并且完成了路由选择。

如果要使用tcpdump抓取其他主机MAC地址的数据包,必须开启网卡混杂模式,所谓混杂模式,用最简单的语言就是让网卡抓取任何经过它的数据包,
不管这个数据包是不是发给它或者是它发出的。一般而言,Unix不会让普通用户设置混杂模式,因为这样可以看到别人的信息,比如telnet的用户名和密码,这样会引起一些安全上的问题,所以只有root用户可以开启混杂模式,开启混杂模式的命令是:
ifconfig en0 promisc //en0是你要打开混杂模式的网卡。

二、命令

1、直接启动tcpdump,将抓取所有经过第一个网络接口上的数据包

tcpdump

2、抓取所有经过指定网络接口上的数据包

tcpdump -i eth0    //eth0指定网络接口

3、抓取所有经过 en0,目的或源地址是 10.37.63.255 的网络数据

tcpdump -i eth0 host 10.37.63.255

4、抓取主机10.37.63.255和主机10.37.63.61或10.37.63.95的通信

tcpdump -i eth0 host 10.37.63.255 and (10.37.63.61 or 10.37.63.95)

5、抓取主机192.168.13.210除了和主机10.37.63.61之外所有主机通信的数据包

tcpdump -i eth0 host 192.168.13.210 and ! 10.37.63.61

6、保存成文件

tcpdump -i eth0 host 10.37.63.255 -w dump.pcap