c - 为什么我无法嗅探 HTTPS 流量?

标签 c windows https

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

我研究了哪些端口用于建立HTTPS session ,并根据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.
 }

最佳答案

您自制的嗅探器在查看端口号时存在错误。具体来说,当您检查 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 不同。

关于c - 为什么我无法嗅探 HTTPS 流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689865/

相关文章:

windows - 使用SVN,我如何有选择地创建一个补丁文件?

php - 5 .htaccess 重写 : Force HTTPS, 删除 index.php,删除 .php,强制 www,强制尾部斜线

c++ - 在 C++ 中使用关键字 class 作为变量名

c - "C"我无法理解如何添加两个矩阵

C 编程从命令行读取字符

python - Flask Python 中的 Http 和 Http

以编程方式下载 GitHub 私有(private)存储库的 C# 示例

c - 如何在 C 中进行无符号饱和加法?

windows - 用于与 Windows 命名管道通信的程序

使用模拟器时 Windows Azure 目标计算机主动拒绝连接