我想调试一个建立简单网络连接的程序。
是否有任何命令可以打印命令的网络活动,可以向我显示(例如在十六进制转储中)正在发送和接收的内容。strace -e trace=%network COMMAND
这是解决方案的 90%,显示原始网络字节。
但格式不太好,它包含大量额外信息,而且格式不太容易阅读。
这是一个活跃的服务器,所以我不想tcpdump
全部网络活动,只有这一个命令。我希望这个命令打印在终端上(如strace
),而不是有太多命令。
服务器是 Ubuntu Linux 18.04。
答案1
根据进程运行和保持连接打开的时间长短,您可以使用lsof
或ss
查看特定应用程序正在使用的网络连接和源端口,并使用该详细信息为tcpdump
我认为 strace 会给你关于源端口和目的地的相同详细信息。
当所有相关的网络流量在您制作适当的过滤器之前都已经发送时 - 考虑捕获(更多)更多细节到文件中,然后针对该 pcap 文件运行 tcp dump。
答案2
既然您提到了,tcpdump
似乎您不需要从 获得的所有(内部)信息strace
。您可能已经知道这些程序在网络上访问了哪些端口(我假设https
并且http
仅作为示例)。如果是这种情况,您可以使用
tcpdump port https or http
(我省略了第二个port
关键字,tcpdump 使用最后一个关键字)。
要改进该过滤器表达式,请查看man (7) pcap-filter