Obeta

通过一些例子学习tcpdump命令

tcpdump命令是一种著名的网络数据包分析工具,此命令用于显示TCP/IP和其他通过连接到安装了tcpdump的系统的网络传输的网络数据包

tcpdump 使用 libpcap 库来捕获网络数据包,几乎在所有 Linux/Unix 版本中都有这个命令.或许你使用过 Wireshark,也有很多人喜欢这个高级的分析工具,但是对于在 linux 中可能没有图形化的界面,因此这时候就需要 tcpdump 了.

安装

默认情况下,tcpdump 在几乎所有 Linux 发行版上都是可用的,如果没有的话可以使用以下方法将其安装在系统上.

  • CentOS/RHEL
$ sudo yum install tcpdump
  • Fedora
$ dnf install tcpdump
  • Ubuntu/Debian/Linux Mint
$ apt-get install tcpdump

命令

tcpdump 的选项非常多,很多时候都会不记得自己需要哪些选项.

$ tcpdump --help

tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips  26 Jan 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
                [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
                [ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
                [ -Q|-P in|out|inout ]
                [ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
                [ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
                [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
                [ -Z user ] [ expression ]

看着这些输出也还是比较懵的,因此可以看下面的总结:

  • -i any 监听所有的网卡接口,用来查看是否有网络流量
  • -i eth0 只监听 eth0 网卡接口
  • -D 显示可用的接口列表
  • -n 不要解析主机名
  • -nn 不要解析主机名或者端口名
  • -q 显示更少的输出(更加 quiet)
  • -t 输出可读的时间戳
  • -tttt 输出最大程度可读的时间戳
  • -X 以 hex 和 ASCII 两种形式显示包的内容
  • -XX 与-X 类似,增加以太网 header 的显示
  • -v, -vv, -vvv 显示更加多的包信息
  • -c 只读取 x 个包,然后停止
  • -s 指定每一个包捕获的长度,单位是 byte,使用-s0 可以捕获整个包的内容
  • -S 输出绝对的序列号
  • -e 获取以太网 header
  • -E 使用提供的秘钥解密 IPSEC 流量

例子

  • 捕获所有网络接口中的所有包
$ tcpdump -i any
  • 捕获指定网卡的所有包
$ tcpdump -i eth0  # 可以通过 "-D" 获取所有网卡列表
  • 捕获的包写入到指定文件中并查看
$ tcpdump -i eth1 w package_file # 可以通过Wireshark打开查看
$ tcpdump -r package_file # 或通过tcpdump查看
  • 查看所有的包详细信息
# 查看更多的信息,不解析主机名和端口号,显示绝对序列号,可读的时间戳
$ tcpdump -ttttnnvvS
  • 查看指定 IP 的流量
$ tcpdump host 1.2.3.4
# 子网的包
$ tcpdump host 1.2.3.4/24
  • 查看指定端口
# 简单信息
$ tcpdump port 1337
# 端口范围
¥ tcpdump portrange 21-23
# 所有的包详细信息
$ tcpdump -ttttnnvXS -s 0 port 1337
  • 基于包的大小过滤流量
$ tcpdump less 32
$ tcpdump greater 64
$ tcpdump <=128
  • 使用源和目的地址过滤
$ tcpdump src 2.3.4.6
¥ tcpdump dst 3.4.5.6
  • 查看指定协议
$ tcpdump icmp
$ tcpdump ip6
$ tcpdump ssh

其中查用的有tcpdump -ttttnnvXS -s 0 port 1337这类,可以调试服务器是否成功接收到的请求数据与返回的数据.

其他的高级用法可以看下面的引用文章中的介绍.

引用

个人随笔记录,内容不保证完全正确,若需要转载,请注明作者和出处.