命令概要
Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是不可少的。TcpDump 是 Linux 中强大的网络数据采集分析工具之一。
用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。
作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的工具之一。
TCPDump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
tcpdump 常用示例
查看当前机器有哪些网络接口
# tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.usbmon1 (USB bus number 1)
6.any (Pseudo-device that captures on all interfaces)
7.lo [Loopback]
下面所有测试中都有 -i any的选项,表示抓取所有网络接口上的包,为了让测试方便
针对指定主机抓包
# tcpdump -i any -n -nn host 192.168.1.10 -w ./$(date +%Y%m%d%H%M%S).pcap
针对指定端口抓包
# tcpdump -i any -n -nn port 80 -w ./$(date +%Y%m%d%H%M%S).pcap
针对主机和端口抓包,两者关系 and
# tcpdump -i any -n -nn host 192.168.1.10 and port 80 -w ./$(date +%Y%m%d%H%M%S).pcap
针对多个端口抓包
# tcpdump -i any -n -nn port 111 or port 443
针对多个主机抓包
# tcpdump -i any -n -nn host www.baidu.com or www.360.com
其他示例:
抓取访问destination 443端口的包
# tcpdump -i any -n dst port 443 # 然后我们做一个curl https://www.baidu.com的操作
…………
19:22:43.049262 IP 120.27.48.179.45008 > 180.101.49.11.https: Flags [.], ack 2997781737, win 229, length 0
…………
抓取源端口是80的包
# tcpdump -i any -nn src port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
19:32:45.325115 IP 100.100.45.131.80 > 10.80.151.139.48500: Flags [.], ack 2072960929, win 2915, length 0
19:32:51.151735 IP 100.100.45.131.80 > 10.80.151.139.48500: Flags [.], ack 959, win 2915, length 0
抓取源或者目标端口都是80的包
# tcpdump -i any -n -nn port 80
19:35:19.465908 IP 120.27.48.179.40640 > 180.101.49.11.80: Flags [P.], seq 1:78, ack 1, win 229, length 77: HTTP: GET / HTTP/1.1
19:35:19.487790 IP 180.101.49.11.80 > 120.27.48.179.40640: Flags [.], ack 78, win 908, length 0
19:35:19.488832 IP 180.101.49.11.80 > 120.27.48.179.40640: Flags [P.], seq 1:2782, ack 78, win 908, length 2781: HTTP: HTTP/1.1 200 OK
19:35:19.488857 IP 120.27.48.179.40640 > 180.101.49.11.80: Flags [.], ack 2782, win 272, length 0
表示抓取destination prot 在100到455之间的端口的数据
# tcpdump -i any -n -nn dst portrange 100-455 # 在另外的面做curl https://www.baidu.com 以及 telnet www.baidu.com 111
## 部分信息如下
19:41:29.534311 IP 120.27.48.179.45588 > 180.101.49.11.443: Flag