基本上,我想做一些类似 strace ssh user@host 的事情,而不是查看系统调用,而是想在建立连接时观察 tcp 连接数据包。
我在两台特定机器之间遇到了这个奇怪的问题,其中 b 可以连接到 a,但 a 大多数情况下无法连接到 b,并且当它能够连接时,连接速度非常慢,需要一分钟才能获得 ssh 问候。
听起来像是数据包被丢弃了,所以我正在寻找一种诊断方法。我知道我可以启动 wireshark 或其他程序(欢迎提出建议),但我想如果有简单且特定于某个过程的方法会很方便。
答案1
你可以完美地使用 tcpdump 进行嗅探
安装 tcpdump
在 debian、ubuntu 上
apt install tcpdump
在 centOS 上
yum install tcpdump
监听 TCP 数据包
首先列出你的接口
tcpdump -D
列出/捕获接口 eth0 上的数据包
tcpdump -n -i eth0
仅列出/捕获接口 eth0 上的 TCP 数据包
tcpdump -i eth0 tcp
截图
答案2
所以我找到了问题所在,原来是一个脚本生成了大量 iptables 丢弃规则。我猜它阻止的其中一个 ip 位于两台机器之间的一条路由上,所以它是间歇性的。删除 iptables 规则后问题就解决了。