0
私はpcapファイルを解析するためにcでlibpcapライブラリを使用しています。私は、TCPクライアントのhelloを抽出し、指定されたサーバと一致するようにサーバ名の表示をチェックしようとしています。それをしてもいいですか?はいの場合、誰かが私にどのように教えてくれますか?ありがとうlibpcapでHelloクライアントとSNIを抽出する
私はpcapファイルを解析するためにcでlibpcapライブラリを使用しています。私は、TCPクライアントのhelloを抽出し、指定されたサーバと一致するようにサーバ名の表示をチェックしようとしています。それをしてもいいですか?はいの場合、誰かが私にどのように教えてくれますか?ありがとうlibpcapでHelloクライアントとSNIを抽出する
PcapPlusPlusライブラリを使用してこれを行うことができるC++コードスニペットがあります。このコードは、あなたがpcapファイルからパケットを読み込んでいることを前提としていますが、ライブインターフェイスから読み取ったときにも同じことができます:
// create a pcap file reader instance
pcpp::IFileReaderDevice* reader = pcpp::IFileReaderDevice::getReader("my_ssl_packets.pcap");
// open the reader for reading
reader->open();
// read the first (and only) packet from the file
pcpp::RawPacket rawPacket;
while (reader->getNextPacket(rawPacket) != NULL)
{
// parse the packet
pcpp::Packet sslParsedPacket(&rawPacket);
// check if this is a SSL packet
if (!sslParsedPacket.isPacketOfType(pcpp::SSL))
continue;
// check if this is a SSL handshake packet
pcpp::SSLHandshakeLayer* sslHandshakeLayer = sslPacket->getLayerOfType<pcpp::SSLHandshakeLayer>();
if (sslHandshakeLayer == NULL)
continue;
// check if this is a client-hello message
pcpp::SSLClientHelloMessage* clientHelloMessage = sslHandshakeLayer->getHandshakeMessageOfType<pcpp::SSLClientHelloMessage>();
if (clientHelloMessage == NULL)
continue;
// extract the Server Name Indication from the client-hello message
pcpp::SSLServerNameIndicationExtension* sniExtension = clientHelloMessage->getExtensionOfType<pcpp::SSLServerNameIndicationExtension>();
if (sniExtension != NULL)
printf("Server Name Indication is: %s\n", sniExtension->getHostName().c_str());
}
// close the file reader
reader->close();
delete reader;
libpcapはネットワークデータのみを取得します。ここから、IPとTCPプロトコルを解析してTLSレイヤーに到達する必要があります。このレイヤーを理解して、SNI拡張子を含むClientHelloを抽出する必要があります。したがって、libpcapを使用するだけで、あなたはこの問題を広すぎるほどの5%にしかなりません。 –
私はTCPとIPプロトコルを解析しましたが、このパケットがClientHelloであることをどのように知っていますか? – sarah
あなたはIPとTCPを扱っていることをどのように知っていましたか?おそらく、これらのプロトコルを理解し、それに応じて情報を抽出することであろう。また、ClientHelloを入手するためにTLSで行う必要があります。ClientHelloのフォーマットについても説明しているTLS 1.2の仕様については、[RFC 5246](https://tools.ietf.org/html/rfc5246)を参照してください。 –