我正在尝试使用tcpdump
诊断网络问题。我运行命令
tcpdump -i eth0 -nS host nameless.host.io
当我发出traceroute
或ping
命令以点击nameless.host.io
时,我会看到来自tcpdump
的信息,但当我使用curl
从主机检索内容时
curl http://nameless.host.io/mycontent/data
curl
命令返回我期望的内容,但我看不到tcpdump
的输出。主机肯定是“外部的”所以它应该在线上。
为什么tcpdump
会对成功的curl
命令保持沉默?
答案 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