0

jnetpcap を使用して初めて単純な Sniffer システムを開発しています。いくつかのコードを変更したところ、現在、HTTP トラフィック (ポート 80) を読み取り、そのフィールドを出力できます。

private void packetHandler(){
    jpacketHandler = new PcapPacketHandler<String>() {   
    Http httpheader = new Http();

    public void nextPacket(PcapPacket packet, String user) {  
        if(packet.hasHeader(httpheader)){
            System.out.println(httpheader.toString());
            if(httpheader.hasPayload()){
               System.out.println("HTTP payload: (string length is "
                     +new String(httpheader.getPayload()).length()+")");
               System.out.println(new String(httpheader.getPayload()));
               System.out.println("HTTP truncated? "
                     +httpheader.isPayloadTruncated());
            }
            //System.out.println(packet.toString());
        }}

    }; 
}

そして、私はそれをループします。jnetpcap を使用して HTTPS (ポート 443) パケットを処理するにはどうすればよいですか?

4

1 に答える 1

0

これが私がやった方法です。少なくともハンドシェイクは確認できますが、その後は終了しますが、jnetpcap はデータを処理できないため、Hexdump とその ASCII だけが得られます。packet.toString() ;) のようにフォーマットするのは適切ではありません;) したがって、nextPacket で:

    if (packet.hasHeader(tcp)) {  
      * tcpst = "Dport: "+tcp.destination()+"; Sport: "+tcp.source();
      int payloadstart = tcp.getOffset() + tcp.size();
      JBuffer buffer = new JBuffer(64 * 1024);
      buffer.peer(packet, payloadstart, packet.size() - payloadstart);
      payload = buffer.toHexdump(packet.size(), false, true, true);
    }

payloadstart は、tcp ヘッダーの先頭 + tcp ヘッダーのサイズです。
buffer.peer はバイトをコピーします (パケットから、バイト数で開始)。
ペイロードは文字列です。toHexdump(何バイト、アドレスon/off、ASCII on/off、HEX on/off)

*テストの理由から、プログラムの後半でポートを出力しただけです。ただし、if ステートメントを作成してポートを確認し、そのうちの 1 つが 443 である場合は残りを行うことができます。

于 2016-02-26T14:43:02.240 に答える