curl在tcpdump中没有显示输出

Pau*_*man 7 curl tcpdump

我正试图用它来诊断网络问题tcpdump.我运行命令

tcpdump -i eth0 -nS host nameless.host.io
Run Code Online (Sandbox Code Playgroud)

当我发出命令tracerouteping命令时,nameless.host.io我会看到信息,tcpdump但是当我用来curl从主机检索内容时

curl http://nameless.host.io/mycontent/data
Run Code Online (Sandbox Code Playgroud)

curl命令返回我期望的内容,但我看不到输出tcpdump.主机肯定是"外部的"所以它应该在线上.

为什么tcpdump对成功的curl命令保持沉默?

han*_*rik 6

我可以想到三种不同的方式来实现这一点 -

1:数据包太多太快,数据包打印缓冲区已满,内核在 tcpdump 有机会打印数据包之前“丢弃”curl 发送的数据包。解决方案是增加缓冲区空间,例如使用--buffer-size=102400(这将专用于缓冲区大约100MB的RAM,我不确定默认大小是多少,但我认为它在1-4MB的范围内)

2:您有多个网络“接口”,但您监听的是错误的接口。我不知道如何询问curl它使用哪个接口,但是你可以明确地告诉curl通过特定接口下载,通过执行curl --interface eth0 URL- 在Linux&Mac&BSD上,你可以通过执行sudo ifconfig(和我认为 Windows 等效项位于控制面板中的某处,但我不知道)

3:tcpdump的默认用户无法读取curl正在运行的用户的数据包,因为某种原因...事实证明tcpdump默认情况下会进入tcpdump捕获时调用的自己的用户,您可以尝试从curl运行的同一用户捕获通过使用-Z curluser,或强制 tcpdump 以 root 身份捕获-Z root