圣詹姆斯公园
  • Introduction
  • 算法
    • RSA算法原理
    • 小议分解质因数函数的实现
  • 开发
    • OTP简介
    • PHP命令行下的信号处理
    • 将普通字符转换为HTML转义字符
    • 如何在微信或给到APP中打开点评APP
    • 开源许可证教程
    • 线上环境关于时间查询的一个坑
    • Git
      • Git的4个阶段的撤销更改
      • Git实用配置笔记
      • Git忽略提交.gitignore
    • SugarCRM
      • SugarCRM6.5中字段定制显示方法研究
      • SugarCRM6.5支持使用Elasticsearch记录日志
      • SugarCRM6.5数据查询方法研究
  • 运维
    • shell终端输出内容美化
    • tcpdump使用简介
    • Wikitten的Nginx配置拾遗
    • 在Docker Terminal中运行容器中的PHPUnit
Powered by GitBook
On this page
  • 引言
  • 快速开始
  • 参考资料
  1. 运维

tcpdump使用简介

作者:James Zhu (fatindeed@hotmail.com)

创建日期: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。

参考资料

  • Manpage of TCPDUMP

  • SSL - The Wireshark Wiki

Previousshell终端输出内容美化NextWikitten的Nginx配置拾遗

Last updated 6 years ago