2017-03-21 90 views
6

我试图用tcpdump诊断网络问题。我运行命令curl在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命令?

+0

我想知道这一点。 –

+1

你可以在执行'tcpdump'的机器上列出你的接口吗?我想你试着听接口'eth0',但也许你正在使用WiFi接口?你能提供更多的意见吗? – Elyasin

回答

4

我能想到的3种不同的方式会发生这种情况 -

1:数据包太多太快,分组到打印缓冲区运行满,内核“滴”的报文卷曲tcpdump的前向有机会将它们打印给你。解决办法是增加缓冲空间,例如通过使用--buffer-size=102400(这将奉献有关RAM的缓存100MB,我不知道的默认大小是什么,但我认为这是在1-4MB的范围)

2:您有多个网络“接口”,并且您听错了。我不知道如何问卷曲它使用哪个接口,但你可以明确告诉curl通过特定的接口下载,通过做curl --interface eth0 URL - 和Linux上的& Mac & BSD,你可以通过做sudo ifconfig得到一个可用接口列表(我认为相当于Windows的控制面板,但idk)

3:tcpdump的默认用户无法读取用户curl正在运行的数据包,因为某些原因...默认情况下将tcpdump在捕获时将其放入其自己的用户tcpdump中,您可以尝试从使用-Z curluser卷曲运行的相同用户捕获,或强制tcpdump以root身份执行捕获操作-Z root

0

你选择正确的接口? (的ethX,wlanX ....)

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