【问题标题】:Why am I unable to sniff HTTPS traffic?为什么我无法嗅探 HTTPS 流量?
【发布时间】:2013-07-17 02:00:14
【问题描述】:

我实现了一个自制的嗅探器(基于 winpcap)并尝试在浏览 HTTPS 网站(gmail 和 facebook)时使用它来嗅探 TCP 连接上的端口 443,但我的代码无法检测到任何流量。

我研究了建立HTTPS会话使用的端口,根据Wikipedia,默认端口是443。

以下是尝试检测我有兴趣嗅探的流量的代码的相关部分。代码可以编译,但由于某种原因我看不到任何数据包。我无法理解为什么它不起作用。 SSL 流量是否可能发生在不同的端口上?代码有错误吗?

if( ntohs(tcpheader->source_port) == 443 || ntohs(tcpheader->dest_port == 443))
{
    printf("\nHTTPS:\n");
    for(i=0;i<Size;i++)
    {
        printf("%.2x",Buffer[i]);
        if(i%16==0)
            printf("\n");
    }
          //do some something.
 }

【问题讨论】:

  • 那是服务器上的443端口,不是你的客户端。你能看到 HTTP 连接吗?
  • http和https在TCP/IP层面没有区别。
  • 问题在大约 8 年后打开。哇!

标签: c windows https


【解决方案1】:

您自制的嗅探器在查看端口号时存在错误。具体来说,当您检查dest_port。您正在对dest_port == 443 的结果应用ntohs()。你应该解决这个问题:

if( ntohs(tcpheader->source_port) == 443 || ntohs(tcpheader->dest_port) == 443)

错误代码几乎肯定会导致|| 的另一侧出现0,因为dest_port 的网络字节顺序不可能永远匹配443

可以在不同于 443 的端口上使用 HTTPS,但不太可能是随机端口。这个其他端口将以通常的方式在 URL 中指定,但在开头使用 https。例如:

https://some.server.net:8443/

因此,甚至可以在端口 80 上使用 HTTPS,但我不知道有任何网络服务器实际检查 SSL 客户端 hello,然后回退到清除处理中。

有一个extension to HTTP 允许它在与客户端协商后切换到 SSL,明确需要安全通信。但是,这与 HTTPS 不同。

【讨论】:

    猜你喜欢
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多