Tips: Serveur web d’urgence avec Netcat

mai 3rd, 2010
|

Il peut arriver que l’on ait ponctuellement besoin de publier un fichier html/txt en http sur une machine.. Pour ça inutile d’installer un serveur web lourd comme apache. Je vous avais déjà parlé du serveur web en python en une ligne, cette fois on remet ça, mais avec NC:

1
$ while true; do nc -l -p 8080 < index.html; done

(attention, la version BSD de Netcat diffère au niveau des arguments, pour la même chose il faut supprimer le « -p »):

Les requêtes de votre navigateur seront renvoyées vers le stdout:

1
2
3
4
5
6
7
8
GET / HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.5 Safari/533.2
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

On peut ensuite faire ce que l’on veut avec – comme simple limite – son imagination ! Exemple:

1
$ while true; do echo "< pre>$(ps aux)< /pre>" | nc -l 8080; done

7 Comments:

  1. Pingback: Tips: Serveur web d'urgence avec Netcat | Debian or not to be ? 2.0 | Information Mining R&D

  2. Pingback: Un serveur web avec la commande Netcat - Tux-planet

  3. Petites erreurs dans la dernière ligne: espace dans et manque option -p.

    Avant:
    $ while true; do echo « $(ps aux) » | nc -l 8080; done

    Après:
    $ while true; do echo « $(ps aux) » | nc -l -p 8080; done

  4. Merci pour le retour Aurélien, pour ce qui est de l’option « -p » elle varie suivant les plateformes. Par exemple, sur les *BSD elle n’existe pas et n’est pas nécessaire.

  5. Je conseille d’ajouter « -q0″, sinon la première requête va « scotcher » le serveur et les clients suivants ne pourront pas s’y connecter (vu que nc ne forke pas pour chaque requête).

    De plus, on n’envoie pas les headers HTTP ; il y a des navigateurs qui s’en fichent ; d’autres pourraient être moins laxistes.

    Si on veut faire un chouïa plus propre :

    while true; do echo -e « HTTP/1.0 200 OK\nContent-Type: text/plain\n\n$(ps aux) » | nc -q0 -l -p 8080; done

    (Pas besoin de puisqu’on est en text/plain)

    HTH,

  6. Merci pour ce commentaire plus qu’instructif.

  7. L’été arrive et les pannes de disques avec. En effet, hier un des disques du serveur qui héberge ce site a rendu l’âme, heureusement le RAID veillant au grain il m’a suffi de le changer…

    Ceci dit, entre le temps de booter sur un *nix de secours et de reconstruire l’ensemble.. j’avais un peu de temps a perdre. Qui dit système de secours dit plus de service et je voulais avertir les vagabonds qui allaient atterrir ici que le service allait être de retour rapidement, me voici donc à la recherche d’une solution pour améliorer un peu tout ça.

    Voici les deux résultats auquels je suis arrivé:

    # FILE=index.htm; while ‘netcat -lp 80 -c ‘echo -e « HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nContent-Length:  » ‘wc -c $FILE | cut -f 1 -d ‘  » « \r\n\r\n »; cat $FILE  »; sleep 0.1 ; done

    # FILE=index.htm; while true; do { echo -ne « HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nContent-Length:  » ‘wc -c $FILE | cut -f 1 -d ‘  » « \r\n\r\n »; cat $FILE; } | nc -l -c -p 80; sleep 0.1; done

    Merci jpetazzo, ton one-liner m’as grandement inspiré ;)

Leave a comment: