简介网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。
tcpdump - dump traffic on a network+
监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。
tcpdump
tcpdump -i en0
例子:监听本机跟主机182.254.38.55之间往来的通信包。
备注:出、入的包都会被监听。
tcpdump host 182.254.38.55
特定来源
tcpdump src host hostname
tcpdump dst host hostname
如果不指定 src 跟 dst,那么来源或者目标是 hostname 的通信都会被监听
tcpdump host hostname
tcpdump port 3000
服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包
tcpdump tcp
监听来自主机 123.207.116.169 在端口 22 上的TCP数据包
tcpdump tcp port 22 and src host 123.207.116.169
tcpdump ip host 210.27.48.1 and 210.27.48.2
210.27.48.1 除了和 210.27.48.2 之外的主机之间的通信
tcpdump ip host 210.27.48.1 and ! 210.27.48.2
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
sudo tcpdump -i any -s 0 -A 'tcp port 80 and host example.com'
如下,抓到1000个包后,自动退出
tcpdump -c 1000
备注:tcpdump 默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump 退出时,才会将输出写到本地磁盘
tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap
复制代码也可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差)
先看下面一个比较常见的部署方式,在服务器上部署了 nodejs server,监听 3000端口。nginx 反向代理监听80端口,并将请求转发给 nodejs server(127.0.0.1:3000)。
浏览器 -> nginx反向代理 -> nodejs server
问题:假设用户(183.14.132.117)访问浏览器,发现请求没有返回,该怎么排查呢?
步骤一:查看请求是否到达 nodejs server -> 可通过日志查看。
步骤二:查看 nginx 是否将请求转发给nodejs server。
tcpdump port 8383
复制代码这时你会发现没有任何输出,即使 nodejs server 已经收到了请求。因为 nginx 转发到的地址是 127.0.0.1,用的不是默认的 interface,此时需要显示指定 interface
tcpdump port 8383 -i lo
复制代码备注:配置 nginx,让 nginx 带上请求侧的 host,不然 nodejs server无法获取 src host,也就是说,下面的监听是无效的,因为此时对于nodejs server来说,src host 都是 127.0.0.1
tcpdump port 8383 -i lo and src host 183.14.132.117
复制代码步骤三:查看请求是否达到服务器
tcpdump -n tcp port 8383 -i lo and src host 183.14.132.117
下一篇
已是最新文章