tcpdump使用简介
作者:James Zhu ([email protected])
创建日期:2018-06-22
引言
在Windows系统中,我们可以通过Fiddler进行抓包,以查看应用程序在网络传输中到底发送/接收了什么内容。在*nix系统中,我们使用什么软件呢——tcpdump。
tcpdump 是一个很常用的网络包分析工具,可以用来显示通过网络传输到本系统的 TCP/IP 以及其他网络的数据包。tcpdump 使用 libpcap 库来抓取网络报文,这个库在几乎在所有的 Linux/Unix 中都有。
tcpdump 可以从网卡或之前创建的数据包文件中读取内容,也可以将包写入文件中以供后续使用。必须是 root 用户或者使用 sudo 特权来运行 tcpdump。
在本文中,我们将会通过一些实例来演示如何使用 tcpdump 命令。
快速开始
本地开发环境(docker-php-dev)的nginx映象中,已经安装了tcpdump,直接使用capture
即可。用法如下:
$ docker exec -it dockerphpdev_nginx_1 capture
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
11 packets captured
11 packets received by filter
0 packets dropped by kernel
脚本会将捕获的包保存在 www/pcap/{Ymd}
目录下的 cap 文件。capture
脚本源代码如下:
LOGDIR="/data1/www/pcap/`date +%Y%m%d`"
if [ ! -d "$LOGDIR" ]; then
mkdir -p "$LOGDIR"
fi
tcpdump tcp port 80 or tcp port 443 -s 0 -w "$LOGDIR/`date +%H%M%S`.cap"
参数说明
tcp port 80 or tcp port 443
监听端口80或443
-s 0
抓取数据包时默认抓取长度为68字节,加上
-s 0
后可以抓到完整的数据包-w packets_file
将所有捕获的包写入文件,以便其它软件(如:Wireshark)解析
如果capture
无法满足你的需求,可参考上述命令在nginx容器的Shell中直接运行tcpdump
。
Wireshark的使用说明不在本文详细介绍,大致流程就是加载cap文件后,根据规则过滤出需要的结果。如果是https的包,需加载证书docker-php-dev/build/nginx/pki/tls/private/guanaitong-dev.key
,具体方法请阅读 SSL - The Wireshark Wiki。