J'essaie de jouer avec netcat pour en savoir plus sur le fonctionnement de HTTP. Je voudrais en écrire quelques-unes dans bash ou Perl, mais je suis tombé sur une pierre d'achoppement au début de mes tests.Scripter une requête d'en-tête HTTP avec netcat
Si j'exécute netcat directement à partir de l'invite et que je tape une requête HEAD, cela fonctionne et je reçois les en-têtes pour le serveur web que je vérifie.
Cela fonctionne:
[[email protected] ~]$ nc 10.1.1.2 80 HEAD/HTTP/1.0 HTTP/1.1 200 OK MIME-Version: 1.0 Server: Edited out Content-length: 0 Cache-Control: public Expires: Sat, 01 Jan 2050 18:00:00 GMT [[email protected] ~]$
Mais quand je mets les mêmes informations dans un fichier texte et pais à netcat par un tuyau ou via une redirection, en préparation pour les scripts, il ne retourne pas les en-têtes.
Le fichier texte se compose de la demande de tête et deux nouvelles lignes:
HEAD/HTTP/1.0
Envoi de la même information par l'intermédiaire écho ou printf ne fonctionne pas non plus.
$ printf "HEAD/HTTP/1.0\r\n"; |nc -n 10.1.1.2 80 $ /bin/echo -ne 'HEAD/HTTP/1.0\n\n' |nc 10.1.1.2 80
Des idées de ce que je fais mal? Vous ne savez pas si c'est un problème de bash, un problème d'écho ou un problème netcat. J'ai vérifié le trafic via Wireshark, et la requête réussie (tapée manuellement) envoie le retour à la ligne dans un deuxième paquet, alors que les méthodes de fichier echo, printf et text maintiennent le retour à la ligne dans le même paquet, mais je suis pas sûr de ce qui cause ce comportement.
Pour votre information, le \ r \ n dans le printf est utile; J'ai basculé entre \ r et \ n dans diverses combinaisons pour voir si cela a changé quelque chose - sans effet. – romandas