0%

抓包一看究竟 - tcpdump

抓包一看究竟 - tcpdump

.. _linux_tcpdump_beginner:

.. note::
知人者智,自知者明。
《老子》

网络诡异时,光 ping/netstat 不够,往往要低头看报文。tcpdump 是命令行抓包老工具:指定网卡、过滤表达式,把路过的包打印出来或落盘成文件,再用 Wireshark 细看也行。

(此文件曾误贴成 touch 内容,现已按命令名纠正。)

官方定义为:

tcpdump - dump traffic on a network

命令格式

1
$ tcpdump [选项] [表达式]

常用选项:

  • -i eth0:指定网卡(也可用 any
  • -n:不反查主机名,输出更快更干净
  • -c 数字:抓满若干包就停
  • -w 文件.pcap:写入文件
  • -r 文件.pcap:回放已抓文件
  • -v / -vv:更啰嗦的解码

多数发行版抓非本机相关流量需要 root:

1
$ sudo tcpdump ...

看某块网卡上的包

1
$ sudo tcpdump -i eth0 -n -c 20

-c 20 抓二十个就停,避免刷屏停不下来。

按主机或端口过滤

1
2
3
$ sudo tcpdump -i eth0 -n host 192.168.1.10
$ sudo tcpdump -i eth0 -n port 22
$ sudo tcpdump -i eth0 -n 'tcp and port 80'

表达式语法接近 BPF;引号包住复杂条件,免得被 shell 拆碎。

落盘再分析

1
2
$ sudo tcpdump -i eth0 -n -w /tmp/ssh.pcap port 22
$ tcpdump -r /tmp/ssh.pcap -n

机房排障时先 -w 抓一段,再拿回笔记本慢慢看,比盯着终端滚日志省心。

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!