TCPDUMP 抓包和 Wireshark 分析
做了测试才发现我是多么讨厌测试......但是也花了功夫了,就记录一下吧。

tcpdump 抓包并保存到文件中

常见命令:

  • -i eth0:指明 eth0 网卡
  • host hostname:截获指定 hostname 发出和接收的所有数据
  • src:截获发出的所有数据
  • dst:截获接收的所有数据
  • -w:保存为文件

由于工作中既需要将 tcpdump 的结果打印,又需要将结果保存供 Wireshark 分析,搜索许久后终于实现了。

tcpdump -s 0 -U -w - | tee target.$(date +%Y-%m-%d-%H-%M-%S).pcap | tcpdump -r -

其中:

  • -w:告诉 tcpdump 将二进制数据写入 stdout
  • -s 0:抓取完整的数据包
  • tee:将该二进制数据写入文件并写入其自己的 stdout
  • -r:告诉第二个 tcpdump 从它的数据中获取它的数据 stdin
  • -U:使数据包在收到后立即写入

docker 容器内抓包

项目采用 docker 部署的时候,若不指明网卡则可能得不到想要的结果,有三种方法:

  1. 直接进入容器
  2. 找到容器对应的虚拟网卡,参数 -i 指明网卡
  3. nsenter 命令在宿主机上进入容器的网络空间

第 2 种 方法参考底部链接,我个人更喜欢第 3 种方法,详细命令如下:

# 获取容器进程 pid
docker inspect --format {{.State.Pid}} ContainerId

# 进入容器的网络空间
nsenter -n --target pid

此时,tcpdump 抓取的只是容器内的数据,其只对当前窗口有效。

Wireshark 分析 grpc 协议

后续用到再补充吧,详细参考底部链接,大致步骤为:

  1. 添加 proto 文件;
  2. 解码为 http2 协议

其他工具

  • 工作流带宽统计: if top
  • 漏洞扫描工具: OWASP ZAP

参考


Last modified on 2021-05-31