-2

自家製のスニファー (winpcap に基づく) を実装し、それを使用して、HTTPS Web サイト (gmail および facebook) を閲覧しているときに TCP 接続でポート 443 をスニッフィングしようとしましたが、私のコードはトラフィックを検出できません。

HTTPS セッションの確立に使用するポートを調べたところ、ウィキペディアによると、デフォルトのポートは 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_port443

443 以外のポートで HTTPS を使用することは可能ですが、ランダムなポートになる可能性は低いです。この他のポートは、通常の方法で URL に指定されますがhttps、最初に指定されます。例えば:

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

したがって、ポート 80 経由で HTTPS を使用することも可能ですが、実際に SSL クライアントの hello をチェックし、クリア処理でフォールバックする Web サーバーを知りません。

セキュリティで保護された通信が必要であることを明確にクライアントとネゴシエートした後、HTTP を SSL に切り替えることができるようにするためのHTTP の拡張機能があります。ただし、これは HTTPS とは異なります。

于 2013-07-17T02:06:58.683 に答える