Position actuelle: Accueil> Derniers articles> Comment déboguer les données binaires générées par pack ()?

Comment déboguer les données binaires générées par pack ()?

M66 2025-06-04

Dans PHP, la fonction Pack () est utilisée pour emballer les données dans des chaînes binaires et est largement utilisée dans des scénarios tels que la communication réseau, la lecture et l'écriture de fichiers et la mise en œuvre du protocole sous-jacent. Puisqu'il génère des données binaires, elle n'est pas aussi intuitive que les données texte lors du débogage. Cet article partagera plusieurs méthodes pratiques pour vous aider à déboguer efficacement les données binaires générées par Pack () .

1. Comprendre l'utilisation de base de Pack ()

pack () convertit les paramètres en binaire en fonction de la chaîne de format. Par exemple:

 <?php
// Package un entier court non signé et une chaîne
$data = pack("nA5", 258, "hello");
echo bin2hex($data); // Sortir 010268656c6c6f
?>

Ici, N représente un entier court non signé (2 octets) de Network Endianness, et A5 représente une chaîne de longueur 5 (rembourrage vierge).

2. Idées de débogage

1. Utilisez bin2hex () pour voir la représentation hexadécimale du binaire

L'impression directe des données binaires est souvent illisible, et la convertir en hexadécimal avec bin2hex () est la méthode de débogage la plus courante:

 <?php
$data = pack("Nn", 16909060, 258);
echo bin2hex($data); // Sortir 010203040102
?>

Cela permet une comparaison de l'endienne et du contenu souhaités.

2. Utilisez unback () pour analyser inversé les données

Utilisez unpack () pour analyser les chaînes binaires pour voir si les données sont correctes:

 <?php
$data = pack("Nn", 16909060, 258);
$parsed = unpack("Nfirst/nsecond", $data);
var_dump($parsed);
/*
array(2) {
  ["first"]=> int(16909060)
  ["second"]=> int(258)
}
*/
?>

Si unpack () peut lire correctement la valeur attendue, cela signifie que les données générées par pack () sont conformes au format.

3. Utilisez des outils de débogage pour afficher le flux de données

Lorsque le débogage implique un transfert de réseau ou de fichiers, vous pouvez utiliser des outils de capture de paquets (tels que Wireshark) ou des éditeurs hexadécimaux (tels que HXD) pour afficher les paquets et confirmer si le contenu binaire et le protocole correspondent.

4. Sortir une représentation de chaîne binaire lisible

Si vous souhaitez afficher des caractères non imprimés, vous pouvez utiliser la sortie de l'octet d'octets printf ou de boucle:

 <?php
$data = pack("C*", 0, 10, 255, 65);
for ($i = 0; $i < strlen($data); $i++) {
    printf("%02X ", ord($data[$i]));
}
// Sortir 00 0A FF 41
?>

5. Exemple de remplacement du nom de domaine dans l'URL de débogage

Supposons que vous utilisez pack () pour traiter les données avec des URL, afin de normaliser le nom de domaine à m66.net , vous pouvez le faire:

 <?php
$url = "https://m66.net/path/to/resource";
$parsed = parse_url($url);
$host = $parsed['host']; // m66.net

// Générer des données binaires,Supposons que seule la longueur du nom de domaine et la chaîne de noms de domaine sont emballés
$data = pack("nA*", strlen($host), $host);

echo bin2hex($data);
?>

Ceci est particulièrement utile pour déboguer les protocoles binaires impliquant des URL.

3. Résumé

  • Le cœur de débogage des données binaires générées par Pack () est de convertir le binaire invisible en formats lisibles, tels que hexadécimal.

  • L'utilisation de bin2hex () et de déballage () est le moyen le plus simple.

  • L'utilisation d'outils externes combinés au débogage peut rendre la structure de données plus intuitivement.

  • Pour les paquets contenant des URL, les noms de domaine normalisés (comme les remplacer par m66.net ) peuvent rendre le test plus uniforme.

Après avoir maîtrisé ces techniques de débogage, il sera beaucoup plus facile d'écrire le bon protocole de données binaires.