Comment faire une requête HTTP GET manuellement avec netcat?
donc, je dois récupérer la température de n'importe laquelle des villes de http://www.rssweather.com/dir/Asia/India<!--3
supposons que je veux récupérer de Kanpur.
Comment faire une requête HTTP GET avec Netcat?
je suis en train de faire quelque chose comme cela.
nc -v rssweather.com 80
GET http://www.rssweather.com/wx/in/kanpur/wx.php HTTP/1.1
Je ne sais pas exactement si je suis dans la bonne direction ou pas. Je ne suis pas en mesure de trouver de bons tutoriels sur la façon de faire une requête HTTP get avec netcat, donc je suis le poster ici.
4 réponses
bien sûr, vous pouvez creuser dans les normes recherchées pour google, mais en fait si vous voulez obtenir une seule URL, il ne vaut pas la peine de l'effort.
vous pouvez aussi démarrer un netcat en mode d'écoute sur un port:
nc -l 64738
...et puis faire une demande de navigateur dans ce port avec un vrai navigateur. Il suffit de taper dans votre navigateur http://localhost:64738
et voir.
dans votre cas, le problème est que HTTP / 1.1 ne ferme pas la connexion automatiquement, mais il attend votre prochain URL que vous voulez récupérer. La solution est simple:
Utiliser le protocole HTTP/1.0:
GET /this/url/you/want/to/get HTTP/1.0
Host: www.rssweather.com
<empty line>
ou un Connection:
en-tête de requête pour dire le serveur que vous voulez fermer après cela:
GET /this/url/you/want/to/get HTTP/1.1
Host: www.rssweather.com
Connection: close
<empty line>
Poste: après l'en-tête GET, n'écrivez que la partie chemin de la requête. Le nom d'hôte à partir duquel vous souhaitez obtenir des données appartient à un Host:
en-tête comme vous pouvez le voir dans mes exemples. C'est parce que plusieurs sites Web peuvent fonctionner sur le même serveur web, donc les navigateurs ont besoin pour dire lui, de quel serveur ils veulent charger la page.
Cela fonctionne pour moi:
$ nc www.rssweather.com 80
GET /wx/in/kanpur/wx.php HTTP/1.0
Host: www.rssweather.com
Et puis appuyez sur la double <enter>
, i.e. une fois pour le serveur http distant et une fois pour le nc
la commande.
source: pentesterlabs
sur MacOS, vous avez besoin du drapeau-c comme suit:
Little-Net:~ minfrin$ nc -c rssweather.com 80
GET /wx/in/kanpur/wx.php HTTP/1.1
Host: rssweather.com
Connection: close
[empty line]
La réponse apparaît alors comme suit:
HTTP/1.1 200 OK
Date: Thu, 23 Aug 2018 13:20:49 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
l'indicateur-c est décrit comme"envoyer CRLF comme fin de ligne".
pour être compatible avec HTTP/1.1, vous avez besoin de L'en-tête Host, ainsi que du "Connection: close" si vous voulez désactiver keepalive.
tester localement avec python3 http.server
C'est aussi une façon amusante de tester. Sur un shell, lancez un serveur de fichiers local:
python3 -m http.server 8000
puis sur le second shell, faites une requête:
printf 'GET / HTTP/1.1\r\nHost: localhost\r\n\r\n' | nc localhost 8000
Host:
l'en-tête est requis dans HTTP 1.1.
affiche une liste HTML du répertoire, comme vous pouvez le voir de:
firefox http://localhost:8000
Ensuite, vous pouvez essayer de lister les fichiers et les répertoires, et d'observer le réponse:
printf 'GET /my-subdir/ HTTP/1.1\n\n' | nc localhost 8000
printf 'GET /my-file HTTP/1.1\n\n' | nc localhost 8000
Chaque fois que vous faites avec succès une requête, le serveur imprime:
127.0.0.1 - - [05/Oct/2018 11:20:55] "GET / HTTP/1.1" 200 -
confirmant qu'il a été reçu.
example.com
IANA maintenu domaine est un autre bon test de l'URL:
printf 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n' | nc example.com 80
et de les comparer avec: http://example.com/
https
SSL
nc
ne semble pas pouvoir poignée https
URLs. Au lieu de cela, vous pouvez utiliser:
sudo apt-get install nmap
printf 'GET / HTTP/1.1\r\nHost: github.com\r\n\r\n' | ncat --ssl github.com 443
Voir aussi: https://serverfault.com/questions/102032/connecting-to-https-with-netcat-nc/650189#650189
Si vous essayez nc
se bloque:
printf 'GET / HTTP/1.1\r\nHost: github.com\r\n\r\n' | nc github.com 443
et en essayant de port 80
:
printf 'GET / HTTP/1.1\r\nHost: github.com\r\n\r\n' | nc github.com 443
donne juste une réponse de redirection à l' https
version:
HTTP/1.1 301 Moved Permanently
Content-Length: 0
Location: https://github.com/
Connection: keep-alive
testé sur Ubuntu 18.04.