-2

我实现了一个自制的嗅探器(基于 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.
 }
4

1 回答 1

2

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

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,然后回退到清除处理中。

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

于 2013-07-17T02:06:58.683 回答