curl在tcpdump中没有显示输出

时间:2017-03-21 13:48:13

标签: curl tcpdump

我正在尝试使用tcpdump诊断网络问题。我运行命令

tcpdump -i eth0 -nS host nameless.host.io

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

curl http://nameless.host.io/mycontent/data

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

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

3 个答案:

答案 0 :(得分:4)

我可以想到三种不同的方式 -

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

2:你有多个网络"接口",你正在聆听错误的网络。我不确定如何询问curl它使用哪个界面,但是您可以明确告诉curl通过特定界面下载,通过执行curl --interface eth0 URL - 以及在Linux& Mac& BSD,你可以通过sudo ifconfig得到一个可用接口列表(我认为windows等价物位于控制面板的某处,但是idk)

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

答案 1 :(得分:0)

你选择合适的界面吗? (的ethX,wlanX ....)

尝试:tcpdump -s 0 -i [interface] host nameless.host.io and tcp port http

答案 2 :(得分:0)

确保您没有配置任何代理。

env | grep -i proxy