Avec la commande telnet docs.python.org 80
, je peux faire une demande HTTP manuelle http://docs.python.org/2/license.html
en tapant la demande réelle.
Maintenant, au lieu de le taper en direct, j'aimerais alimenter la demande à partir d'un fichier texte.
J'ai essayé ceci:
cat request.txt|telnet docs.python.org 80
request.txt :
GET /2/license.html HTTP/1.1
Host: docs.python.org
(Vous devez terminer le fichier avec une ligne vierge ou vous obtiendrez une mauvaise demande!)
Mais la connexion au serveur est immédiatement fermée.
Comment dois-je diriger correctement request.txt vers telnet docs.python.org 80
?
Éditer:
C'est bon à savoir; si vous utilisez HEAD
au lieu de GET
, vous obtiendrez la même réponse que si vous aviez fait une GET
demande, à l'exception du corps du message.
Donc, utilisez HEAD
si vous voulez simplement examiner les en-têtes HTTP. (c'est-à-dire pour que le contenu de la réponse n'encombre pas la sortie de votre shell.)
GET
vous avez publié, j'obtiens une408 Request Time-out
erreur. De plus, n'est-cewget http://docs.python.org/2/license.html
pas une option?telnet docs.python.org 80
, vous devrez donc vous dépêcher et taper ces deux lignes (copier-coller si nécessaire) en quelques secondes ou le serveur retournera une erreur de temporisation.telnet docs.python.org 80
<ENTER>
GET /2/license.html HTTP/1.1
<ENTER>
Host: docs.python.org
<ENTER>
<ENTER>
<ENTER>
une deuxième fois à la fin est que le protocole HTTP nécessite une ligne vide supplémentaire après les en-têtes de demande. Voir la section des messages de demande de l' article wiki HTTPtelnet < request.txt
mais je ne peux pas faire fonctionner laGET
commande.Réponses:
Utilisez netcat (commande nc) plutôt que "telnet", donc
Telnet est un hack rapide et facile, mais netcat est, apparemment, l'outil approprié pour le travail.
la source
Je n'ai pas vraiment d'expérience,
telnet
mais cela prend des données de la redirection de fichiers:Je peux le faire se connecter correctement au serveur comme suit:
Peut-être que vous pouvez comprendre comment le faire accepter la
GET
commande mais je n'ai pas pu. Une alternative est d'utiliser unexpect
script:Vous pouvez ensuite enregistrer le script sous
telnet.exp
, le rendre exécutable et l'exécuter:la source
expect
! J'ai choisi la réponse de davidgo car c'est juste la meilleure solution pour ce cas. Je ne vois aucune différence d'utilisation entre netcap et telnet pour ce que je voulais réaliser. Merci pour l'effort néanmoins Terdon, si je pouvais voter davantage votre réponse, je le ferais.nc
est la meilleure solution, vous devez l' accepter.interact
est la bonne façon de terminer ceexpect
script.interact
"donne le contrôle du processus en cours à l'utilisateur, de sorte que les frappes soient envoyées au processus en cours, et que les stdout et stderr du processus en cours soient renvoyés" (c'est deman expect
). C'est doncinteract
le moyen de donner à l'utilisateur un moyen d'utiliser réellement la connexion telnet.telnet
plutôt que sur l'interaction avec celui-ci, je pense que vous devriez terminer avecclose -i $spawn_id
quelque chose comme ça. Ensuite, le script se termine. Avec,interact
je n'ai pas pu sortirtelnet
du tout et j'ai dû fermer mon terminal. Assez misérable (bien que ce soit peut-être partiellement de ma faute.)