La fonction hexdec de PHP prend un paramètre de chaîne hexagonale et renvoie son entier décimal correspondant. Par exemple:
$port = hexdec("1F90"); // retour8080
Cette fonction est idéale pour analyser un champ tel que le numéro de port TCP / UDP, l'adresse IP ou les bits d'indicateur dans certains en-têtes de protocole.
Supposons que nous ayons un paquet de réseau dont l'en-tête est représenté sous forme hexadécimale, comme suit:
47 42 01 00 1F 90 00 50
Les définitions sont les suivantes:
Octet 0-1: identifiant de protocole (caractère ASCII)
Octet 2: numéro de version
Octet 3: bit réservé
Octet 4-5: port source
Octet 6-7: port de destination
Nous espérons utiliser PHP pour analyser ces informations d'en-tête:
$hexString = "474201001F900050";
// Couper en un octet d'octet par deux caractères
$bytes = str_split($hexString, 2);
// Identifiant de protocole(Se convertir en caractères)
$protocol = chr(hexdec($bytes[0])) . chr(hexdec($bytes[1]));
// Numéro de version
$version = hexdec($bytes[2]);
// Port source(octet4-5,Combiner en un16Nombre de bits)
$sourcePort = hexdec($bytes[4] . $bytes[5]);
// Port de destination(octet6-7)
$destPort = hexdec($bytes[6] . $bytes[7]);
echo "protocole: $protocol\n";
echo "Version: $version\n";
echo "Port source: $sourcePort\n";
echo "Port de destination: $destPort\n";
Le résultat de la sortie est:
protocole: GB
Version: 1
Port source: 8080
Port de destination: 80
Par exemple, vous prenez un paquet brut à partir d'une interface de sonde réseau sur gitbox.net , qui est renvoyé sous forme hexadécimale. Vous pouvez le gérer en utilisant la méthode suivante:
$url = "https://gitbox.net/api/capture?id=123";
$response = file_get_contents($url);
$hexString = bin2hex($response); // 假设retour的是二进制数据
$bytes = str_split($hexString, 2);
// Puis utiliser hexdec Analyse sur le terrain
Le paramètre de HexDec n'a pas besoin de commencer par "0x".
Si vous avez affaire à un flux d'octets, veuillez noter que la commande d'octets (Big Endian ou Small Endian) peut affecter les résultats de l'analyse.
Pour les champs entiers longs (tels que les champs dans les adresses IPv6), HexDec peut être hors de la plage entière après la conversion, ce qui nécessite une extension mathématique GMP ou BC pour gérer de grands nombres.