tcpdump 是一个运行在命令行下的抓包工具,如果想知道网络中有什么在流通,那么 tcpdump 就是一个很好的工具。它允许用户拦截和显示发送或收到过程中网络连接到该计算机的 TCP/IP 和其他数据包。tcpdump 适用于大多数的类 Unix 系统操作系统(如 Linux,BSD 等)。类 Unix 系统的 tcpdump 需要使用 libpcap 这个捕捉数据的库就像 Windows 下的 WinPcap。

tcpdump 可以识别的协议有:

  • ARP
  • RARP
  • ICMP
  • TCP
  • UDP
  • IP
  • IPv6
  • AppleTalk
  • IPX

常见用法

不带任何参数运行:

tcpdump

过滤端口

tcpdump -i eth1 port 25

网络过滤

tcpdump -i eth1 net 192.168

使用 -vv 打印更多的信息。

tcpdump -vv -i eth0

过滤 TCP 数据包

tcpdump 可以识别很多数据包,可以使用 tcpdump 的过滤来过滤,比如只输出 TCP 数据包:

tcpdump tcp

再比如想要过滤 udp 或者 80 端口的 TCP 包:

tcpdump udp or port 80

过滤主机

tcpdump -i eth1 host 192.168.1.1

表达元

已经有上面这些例子,就能看到 tcp, udp 这些都是过滤的表达式。tcpdump 有一些比较重要的过滤表达式:

  • tcp
  • udp
  • port some.port
  • host some.host
  • net some.network

运算符

上面的例子中有一个 or,表示或,tcpdump 支持很多运算符

  • or
  • and
  • not

更多的运算符可以参考手册。

同类工具

Tshark 是 wireshark 的命令行版本,类似于 tcpdump,可以用于网络抓包,封包解析等。

抓取指定设备的网络包

tshark -i eth0

抓取目的端口 80 的包

tshark tcp dst port 80