【问题标题】:curl shows no output in tcpdumpcurl 在 tcpdump 中没有显示输出
【发布时间】:2017-08-13 05:34:41
【问题描述】:

我正在尝试使用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 命令保持沉默?

【问题讨论】:

  • 我也想知道这个。
  • 你能列出你在执行tcpdump的机器上的接口吗?我猜你尝试在接口eth0 上收听,但也许你正在使用 WiFi 接口?您能否提供更多意见?

标签: curl tcpdump


【解决方案1】:

我能想到这可能发生的 3 种不同方式 -

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

2:您有多个网络“接口”,而您正在监听错误的一个。我不确定如何询问 curl 它使用哪个接口,但您可以通过执行 curl --interface eth0 URL 明确告诉 curl 通过特定接口下载 - 在 Linux 和 Mac 和 BSD 上,您可以通过以下方式获取可用接口列表做sudo ifconfig(我认为windows等价物在控制面板的某个地方,但是idk)

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      env | grep -i proxy
      

      【讨论】:

        猜你喜欢
        • 2012-01-17
        • 1970-01-01
        • 2013-07-28
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多