是否可以从 Linux 中的命令行观察连接调用上的 tcp 连接数据包?

是否可以从 Linux 中的命令行观察连接调用上的 tcp 连接数据包?

基本上,我想做一些类似 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

截图

tcpdump 显示可用接口

tcpdump 捕获显示数据包

答案2

所以我找到了问题所在,原来是一个脚本生成了大量 iptables 丢弃规则。我猜它阻止的其中一个 ip 位于两台机器之间的一条路由上,所以它是间歇性的。删除 iptables 规则后问题就解决了。

相关内容