网络抓包,我们肯定不会陌生。

常见的(我用过的)抓包工具有:
Chrome控制台Network面板, Fiddler, Wireshark.
然而都是windows下的工具, 在服务器上工作, 我们还需要一些命令行的抓包工具, 比如tcpdump.

tcpdump简单来说就是一个命令行抓包工具, 可以指定网卡, 端口, IP等, 功能非常强大.
如果没有安装,可以通过yum install -y tcpdump执行安装(Redhat系列)

实验环境:

  • Linux: CentOS release 6.10 (Final)
    IP: 192.168.31.42
  • Windows:
    IP: 192.168.31.106

在 Linux上的8080端口开了一个http服务,Windows中发起请求

下面是一些常用选项及使用截图.

  • -D 列出哪些网卡可以抓包
[root@gerrylon dev-scripts]# tcpdump -D
1.eth0
2.docker0
3.nflog (Linux netfilter log (NFLOG) interface)
4.nfqueue (Linux netfilter queue (NFQUEUE) interface)
5.usbmon1 (USB bus number 1)
6.any (Pseudo-device that captures on all interfaces)
7.lo
  • -i xx 抓取经过网卡xx的数据包
    如 抓取经过eth0的数据包:
  • centos7 如何做tcping_IP

  • -c num 最多抓取几个包就停止
    上面的tcpdump -i eth0包实在太多了,已经“刷屏”了,加上-c 5指定最多抓取5个包就停止
  • centos7 如何做tcping_centos7 如何做tcping_02

  • -n Don’t convert host addresses to names. This can be used to avoid DNS lookups.
    不把主机地址转换成名字. 就是可以避免DNS查询。
  • -nn Don’t convert protocol and port numbers etc. to names either
    不会将协议和端口号转换为名字
    比如上面有个tcpdump -i eth0 -c 5, ssh连接端口显示的是ssh, 加上-nn就会显示成22.
    如下图(注意标红位置):
  • centos7 如何做tcping_抓包工具_03

  • 只抓取指定协议的数据包, 如tcpdump -i eth0 icmp 只抓取icmp的数据包
    icmp最著名的两个应用pingtraceroute 以traceroute为例子看看:
    tcpdump -i eth0 icmp
  • centos7 如何做tcping_抓包_04

  • traceroute www.yandex.ru
  • centos7 如何做tcping_抓包_05

  • port 8080 指定端口
  • host 192.168.31.42 指定IP(只抓取和显示与192.168.31.42有关的包)
  • port 8080 and host 192.168.31.42 同时指定端口和IP
  • src 192.168.31.42 只抓取源IP为192.168.31.42的包
  • dst 192.168.31.42 只抓取目标IP为192.168.31.42的包
  • 多条件 tcpdump -i eth0 'port 8080 and (src 192.168.31.106 or src 192.168.31.42)' (注意要加单引号,否则语法有错)
  • -A Print each packet (minus its link level header) in ASCII. Handy for capturing web pages.
    以ACSII形式打印出每一个包,对抓web页面非常方便
  • -X 以十六进制打印出包内容
  • -t 不要打印时间戳
  • -w test.pcap 保存成文件
  • tcpdump -nn -r test.pcap (从文件读取, src等过滤规则同样适用)
    tcpdump -nn -c 5 -r test.pcap port 8080 (port 8080这种表达式要写在后面,写在-r前面会报错)

保存下来的 test.pcap 文件用wiresharek也可以打开观察.
如:

# 抓包将信息存储到test.cap
tcpdump -i eth0 -nn 'port 8080' -w test.cap

在windows请求"http://192.168.31.42:8080/", 也就是linux上的8080端口http服务
Ctrl+C停止tcpdump抓包

用Wireshark打开test.cap:

centos7 如何做tcping_抓包_06

这样观看是不是感觉特别直观呢?

总结:
命令选项非常多,但是掌握常用的就可以胜任大部分工作了,不要看见一大堆选项就不想学了。