【问题标题】:How can I get Wireshark to show me my local HTTP Traffic?如何让 Wireshark 显示我的本地 HTTP 流量?
【发布时间】:2014-11-03 07:24:15
【问题描述】:

当我输入此 URI 以在我正在运行的 Web API 应用程序上调用 REST 方法时:

http://SHANNON2:21608/api/inventory/sendXML/duckbill/platypus/someFileName // using Hostname of local machine

--或者这个:

http://192.168.125.50:21608/api/inventory/sendXML/duckbill/platypus/someFileName // using IP Address of local machine

...在 Postman 中(使用 HttpPost,并附加一个 xml 文件)并运行它,在 Fiddler 2 中检查它时,我在 Fiddler 的 Inspectors.WebView 窗格中看到了这个错误:

Bad Request - Invalid Hostname

--------------------------------------------------------------------------------

HTTP Error 400. The request hostname is invalid.

注意:即使我确实在服务器上的相应控制器 REST 方法中命中了断点,我也会收到该错误。

为了进一步检查到底发生了什么(正在发送什么 HTTP),我运行 Wireshark 并仅看到我的 IP 地址的目的地:

...这个以我的 IP 地址为来源:

为什么没有 HTTP 协议条目? HTTP 显然正在发送,因为我遇到了我在服务器控制器方法的第一行设置的断点:

[HttpPost]
[Route("api/inventory/sendXML/{userId}/{pwd}/{filename}")]
public async Task SendInventoryXML(String userId, String pwd, String fileName)
{
    Task task = Request.Content.ReadAsStreamAsync().ContinueWith(t =>
    {
        var stream = t.Result;
        using (FileStream fileStream = File.Create(String.Format(@"C:\HDP\{0}.xml", fileName), (int)stream.Length))
        {
            byte[] bytesInStream = new byte[stream.Length];
            stream.Read(bytesInStream, 0, (int)bytesInStream.Length);
            fileStream.Write(bytesInStream, 0, bytesInStream.Length);
        }
    });
}

那么,为什么 Wireshark 对向我显示发送的 HTTP 如此保密?它是否对这种内部沟通视而不见,如果是,我如何“释放它”向我展示这一点?

更新

啊哈/瞧! Postman、RawCap (http://www.netresec.com/?page=RawCap) 和 Wireshark 的组合似乎有效。我立即在命令提示符下运行了新发现的 RawCap,并使用了这种措辞:

RawCap.exe 192.168.125.50 captured.pcap

...然后从 Postman 调用 REST 方法,并在 Wireshark 中打开 RawCap 创建的结果文件(在我的例子中为 captured.pcap),它向我显示了一些 HTTP 流量:

有关 HTTP 调用的更多详细信息,请参见此处:

我不知道如何优雅地“关闭” RawCap。

更新 2

RawCap/Wireshark 告诉我这是一个错误请求(我已经知道这是响应):

...但我没有看到任何线索为什么它被认为是一个错误的请求

更新 3

当我尝试使用各种形式的“本地”(主机名、IP 地址、“本地主机”)从 Fiddler Composer 调用我的 REST 方法时,我从未到达服务器中的断点;在此之前我收到错误消息(404 用于 locohost,400 用于所有其他):

【问题讨论】:

  • 我觉得不太一样;就我而言,我看到了本地机器的流量(使用 IP 地址),但我只是没有看到一些应该存在/可见的 HTTP 流量。
  • 您确定请求和响应是通过 TCP 上的 HTTP,而不是 TCP 上的 SSL/TLS 上的 HTTP 吗? Wireshark 流量显示 TLSv1 流量,您会看到它是否是 HTTP over TLS over TCP。我认为 Fiddler 可能会在 被 SSL/TLS 加密之前拦截流量。
  • 错误响应的内容长度为 334 字节...消息正文包含什么?您有可以比较的成功调用的痕迹吗?
  • ...说到内容长度,为什么您的 POST 显示内容长度为 0?

标签: http asp.net-web-api fiddler wireshark postman


【解决方案1】:

通常,Invalid Hostname 表示 HTTP 请求的 Host 标头包含未绑定到 Web 服务器上的任何站点的值。例如,您使用 IP 地址作为主机,但如果您的服务器仅配置为接受机器名(例如 mybox),那么您将看到来自服务器的 HTTP/400 要求您提供正确的主机名.

【讨论】:

  • 从 Postman 和 Fiddler Composer 测试它,唯一在服务器的 Controller 代码中命中断点的是“localhost”; IP 地址不起作用,主机名也不起作用。我需要在哪里查看服务器以了解它是如何配置的?
  • 你在什么服务器上运行? VS 开发服务器将 only 绑定到localhost。如果您正在运行完整的 IIS 实例,请使用服务器管理器绑定其他主机名。
  • 我认为这是我的问题 - 服务器应用程序正在我的开发机器上从 VS 2013 运行。这使用 IIS Express,对吗?我认为“完整的 IIS 实例”是指比这“更强大”的东西?
  • 是的,full IIS instance 就像在 Windows Server 上运行的 IIS。如果您想使用非localhost 主机名,请参阅stackoverflow.com/questions/5235826/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
相关资源
最近更新 更多