Un serveur web avec la commande Netcat
Vous vous souvenez sûrement de cette astuce qui permettait de créer un serveur web en une seule ligne de code Python, proposée à l'époque par Crashdump. Et bien sachez que ce dernier nous en présente aujourd'hui une nouvelle. Et ce coup-ci, plus besoin de python car la technique fait tout simplement appel à la commande netcat.
Voici un exemple d'utilisation. Ici, on affiche le contenu d'une page HTML choisi à l'avance. Attention, si votre système d'exploitation utilise la version BSD de Netcat (ex: ubuntu), il faudra supprimer l'argument "-p" :
while true; do nc -l -p 8080 < index.html; done
On pourra ensuite saisir cette adresse pour consulter la page :
http://localhost:8080
Les requêtes des navigateurs seront automatiquement loggées dans le terminal :
GET / HTTP/1.1 Host: 127.0.0.1:8080 Connection: keep-alive User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100330
Bien entendu, à partir de là, il est possible de faire des choses bien plus sophistiquées, comme notamment afficher la liste des processus de façon dynamique :
while true; do echo "<pre>$(ps aux)</pre>" | nc -l 8080; done
11 Commentaires pour "Un serveur web avec la commande Netcat"
Flux des commentaires de cet article Ajouter un commentairePetite correction pour ton deuxième exemple:
while true; do echo "$(ps aux)" | nc -l -p 8080; done
@Gatien : si tu enlève les balises HTML de pré-formatage, les processus sont affichés sur une seule ligne...
@pti-seb ça pas l'aire de marcher la commande avec netcat ... et concernant la premier avec python .elle très dangereuse: si tu lance la commande à partir de la racine tu à accès à tout : (/etc/shadow /etc/passwd ...
un bug ? )
@momito : oui la commande python comporte un risque, mais c'est pas non plus tout le monde qui va utiliser ce genre d'astuce. Pour netcat, tu doit avoir un problème quelque part chez toi...
$ netcat -l -p 8080 l'option -p marche pas... assez bizarroïde , il suffit de faire ceci netcat -l 8080
@momito : oui, c'est ce qui est indiqué dans l'astuce. Si ta distribution utilise la version BSD de netcat, il faut enlever l'argument. Tu utilise qu'elle distribution d'ailleurs ?
Ubuntu lucid (10.04).
@momito : ok, je vais rajouter ça en exemple.
@momito : python n'aura pas accès à tout, puisque tu ne lances pas cette commande en root, n'est-ce pas ?
@toto : oh que oui , crois moi ! tu a absolument accès à tout
Hmmm. Intéressant.
Comment fait-on pour connaître la version de nc qu'on a ?
Un ldd c'est bon ?