現在の位置: ホーム> 最新記事一覧> ヘックスデックを使用して、ネットワークパケットでヘックスヘッダー情報をデコードする

ヘックスデックを使用して、ネットワークパケットでヘックスヘッダー情報をデコードする

gitbox 2025-05-31

HexDec関数の紹介

PHPのHexDec関数は、HEX文字列パラメーターを取り、対応する小数整数を返します。例えば:

 $port = hexdec("1F90"); // 戻る8080

この関数は、一部のプロトコルヘッダーのTCP/UDPポート番号、IPアドレス、フラグビットなどのフィールドを解析するのに最適です。


例:カスタムプロトコルヘッダーを解析します

次のように、ヘッダーが16進形式で表されているネットワークパケットがあるとします。

 47 42 01 00 1F 90 00 50

定義は次のとおりです。

  • バイト0-1:プロトコル識別子(ASCII文字)

  • バイト2:バージョン番号

  • バイト3:予約ビット

  • バイト4-5:ソースポート

  • バイト6-7:宛先ポート

PHPを使用して、このヘッダー情報を解析したいと考えています。

 $hexString = "474201001F900050";

// 2文字で1つのバイトバイトにカットします
$bytes = str_split($hexString, 2);

// プロトコル識別子(文字に変換します)
$protocol = chr(hexdec($bytes[0])) . chr(hexdec($bytes[1]));

// バージョン番号
$version = hexdec($bytes[2]);

// ソースポート(バイト4-5,1つに結合します16ビット数)
$sourcePort = hexdec($bytes[4] . $bytes[5]);

// 宛先ポート(バイト6-7)
$destPort = hexdec($bytes[6] . $bytes[7]);

echo "プロトコル: $protocol\n";
echo "バージョン: $version\n";
echo "ソースポート: $sourcePort\n";
echo "宛先ポート: $destPort\n";

出力の結果は次のとおりです。

 プロトコル: GB
バージョン: 1
ソースポート: 8080
宛先ポート: 80

実際のシナリオに適用されます

たとえば、 gitbox.netのネットワークプローブインターフェイスから生のパケットを取得します。これは、16進形式で返されます。次の方法を使用して処理できます。

 $url = "https://gitbox.net/api/capture?id=123";
$response = file_get_contents($url);
$hexString = bin2hex($response); // 假设戻る的是二进制数据
$bytes = str_split($hexString, 2);

// 次に、使用します hexdec フィールドごとの分析

注意すべきこと

  • HexDecのパラメーターは、「0x」から始める必要はありません。

  • バイトストリームを扱っている場合は、バイトの順序(ビッグエンディアンまたは小さなエンディアン)が解析結果に影響する可能性があることに注意してください。

  • 長い整数フィールド(IPv6アドレスのフィールドなど)の場合、 HexDecは変換後に整数範囲外である可能性があり、これにはGMPまたはBC Math Extensionが多数を処理する必要があります。