tcpdump是Linux系统下的一款抓包命令集,工作原理是基于网卡抓取流动在网卡上的数据包。在Linux系统中由于tcpdump命令的简单和强大,我们一般直接使用tcpdump命令来抓取数据包。保存之后,拖下来在wireshark中分析。
怎样判断你的Linux系统中是否有tcpdump呢?很简单输入一下命令:
tcpdump -h
若出现以下信息,恭喜你躲过一劫(Linux一般会自带)。
如果没有那么得先在Linux安装这个软件了。你以为很难么,一行命令就搞定啦:
yum install -y tcpdump
安装完成之后敲入命令:
tcpdump -h
能够出现上面的信息以及帮助,证明你已经成功安装好了。
现在,你以为你输入tcpdump就能抓包了吗?啊哈哈可以的,能抓取到所有经过第一个网卡的数据包哦。但是,表着急,在这样的数据包中查看我们感兴趣的数据,那堪比大海捞针呐,所以先学习吧。
来看看tcpdump命令的一些参数说明吧先~
tcpdump -D #列出可用于tcpdump抓取数据包的网卡列表
来说下:
eth0 //表示该服务器的第一块网卡,一般我们tcpdump抓包都使用这块网卡来抓取。可能有eth1,eth2等等 nflog //Linux下的网络过滤网卡,一般我们不使用它 nfqueue //Linux网络过滤队列接口,一般不使用它 usbmon1 //USB总线接口,一般不使用它 any //任何网卡接口 lo //指的是该主机的回环地址(127.0.0.1),一般用来测试网络专用,一般的数据都不通过这块网卡,所以我们用tcpdump抓包的时候也不使用这块网卡。
了解了这个之后,我们来看下服务器下有哪些网卡,输入:
ifconfig //这可不是Windows下的ipconfig哦,不要记混了
看见没有,我的系统有两块网卡,我们使用第一块。
我们现在使用tcpdump的第一个命令
tcpdump //抓取通过第一个网卡的数据包,并将信息打印在屏幕上实时显示出来
这么容易吗?哈哈,那服务器的网卡不是有多个吗?我想抓取指定网卡的数据包怎么办呢?
tcpdump -i eth0 //抓取通过eth0网卡的数据包,信息实时打印在屏幕上。-i表示指定哪个网卡接口,后面跟网卡名字,比如eth0或者lo
这样够了吗?哈哈,和eth0网卡会话的目的地址可多了,我只关心并找到和某一个IP地址之间会话的数据怎么办呢?
tcpdump -i eth0 host 192.39.45.66 //抓取该网卡和该IP地址会话的数据包,实时打印在屏幕上,host后面跟IP地址或者域名,比如也可以写成host www.baidu.com
哈哈,这样,好像有点味道了哟,但是还不满足哦,我只想查看所有192.39.45.66发送给服务器的数据包呢?(说白了就是我的服务器接收到的数据)
tcpdump -i eth0 src host 192.39.45.66 //抓取所有该网卡和该IP之间,收到的数据,src表示服务器收到的数据,如果该参数缺省,默认抓取所有数据
我只想查看服务器网卡eth0发送给192.39.45.66的所有数据包呢?(说白了就是我的服务器发出去的数据)
tcpdump -i eth0 dst host 192.39.45.66 //抓取所有该网卡和该IP之间,收到的数据,dst表示服务器发出去的数据,如果该参数缺省,默认抓取所有数据
哈哈,但是,有个问题,我想查看这个网卡下,某个端口号和目的IP会话的数据包,比如8080端口,怎么办啊?这里如果端口和IP地址同时存在的话,需要加and
tcpdump -n -i eth0 port 8080 and host 192.39.45.66 //查看8080端口号的会话数据包,port表示端口号,后面比如跟8080。-n表示不对具体ip地址做域名解析,直接显示会话两边的具体ip地址
还有个小小的问题,我现在只需要抓取某种协议的数据包,其他类型不关心,怎么办?例如tcp或者udp协议的数据包
注:如果没有标明抓取哪种协议类型的数据包,默认抓取全部协议类型的数据哦
tcpdump -n -i eth0 port 8080 and host 192.39.45.66 tcp
到这里,你都觉得好像可以了哈,但是有个很重要的问题,不是说好的Linux用tcpdump,Windows下用wireshark来分析吗?这打印在屏幕上,怎么分析嘛,应该有个保存成某个文件的命令,下载到windows中用wireshark打开才对吧?