Linux 的命令太多,tcpdump 是一个非常强大的抓包命令。
有时候想看线上发生的一些问题:
- nginx 有没有客户端连接过来……
- 客户端连接过来的时候 Post 上来的数据对不对……
- 我的 Redis 实例到底是哪些业务在使用……
tcpdump 作为网络分析神器就派上用场了!
它本身的命令和参数有点多,我也简单记录下一些常用的操作。
网上的资料其实挺多(见文末),
但真的派上用场的,可能也就是我下面列出来的这几个 :)
抓取 eth0 网卡的 80 端口:
代码语言:shell复制tcpdump -nnA 'port 80' -i eth0
-A:以ASCII格式打印出所有分组,并将链路层的头最小化
-nn:显示IP地址和端口号
抓取发往 10.48.31.56 的数据包:
代码语言:shell复制tcpdump -i eth0 dst host 10.48.31.56
指定网络过滤:
代码语言:shell复制tcpdump -i eth0 src net 10.48
指定协议过滤:
代码语言:shell复制tcpdump -i eth0 tcp
表达式过滤:
代码语言:shell复制tcpdump -i eth0 '((tcp) and (port 80) and ((dst host 10.48.31.56) or (dst host 10.48.31.58)))'
参考资料
- 《tcpdump使用技巧》
- 《肝了三天,万字长文教你玩转 tcpdump,从此抓包不用愁》
- 《tcpdump原理及常用命令》
- 《Linux系统 tcpdump 抓包命令使用教程》
- 《聊聊 tcpdump 与 Wireshark 抓包分析》