Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

serveur web avec netcat et bash

9 réponses
Avatar
Kevin Denis
Bonjour,

j'essaie de réaliser un micro site web avec netcat et un script bash.
L'idée est de pouvoir rendre dix pages:
for i in `seq 1 10`
do
netcat -l -p 8080 -e web.sh
done

et:
cat web.sh
#! /bin/bash

echo "HTTP/1.0 200 OK"
echo "Content-Type: text/html; charset=ISO-8859-1"

echo "<HTML>Hello World</HTML>"

Mais curieusement, links couine, lynx couine, wget couine:
links affiche "Hello World", ainsi qu'un popup:
error loading http://127.0.0.1:8080
connection refused.
lynx: unexpected server disconnect
wget: $ wget http://127.0.0.1:8080
--2008-07-29 11:40:51-- http://127.0.0.1:8080/
Connexion vers 127.0.0.1:8080...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: non spécifié [text/html]
Saving to: `index.html'

[ <=> ] 102 --.-K/s in 0s

2008-07-29 11:40:51 (720 KB/s) - ERREUR de lecture à l'octet 102
(Connexion ré-initialisée par le correspondant).Nouvel essai.

Mes lectures sur le web me proposent l'utilisation de l'option -L ou
-k, mais elles sont inexistantes avec ma version de netcat.

J'ai essayé d'ajouter un echo "Connection: Close" dans les en-têtes,
mais cela ne change rien.

Je poste dans ce groupe car j'ai l'impression que je me trompe avec
netcat et bash. Si mon problème est lié à autre chose, redirigez
moi vers le groupe approprié.

Merci
--
Kevin

9 réponses

Avatar
Stephane CHAZELAS
2008-07-29, 10:55(+00), Kevin Denis:
j'essaie de réaliser un micro site web avec netcat et un script bash.


[...]
#! /bin/bash

echo "HTTP/1.0 200 OK"
echo "Content-Type: text/html; charset=ISO-8859-1"


[...]


printf '%srn'
'HTTP/1.0 200 OK'
'Content-Type: text/html; charset=ISO-8859-1'
''

--
Stéphane
Avatar
Kevin Denis
Le 29-07-2008, Stephane CHAZELAS a écrit :
j'essaie de réaliser un micro site web avec netcat et un script bash.


[...]
#! /bin/bash

echo "HTTP/1.0 200 OK"
echo "Content-Type: text/html; charset=ISO-8859-1"


[...]

printf '%srn'
'HTTP/1.0 200 OK'
'Content-Type: text/html; charset=ISO-8859-1'
''



Cela ne fonctionne pas mieux. Mais je ne comprends pas le but de la
manoeuvre (?).
--
Kevin
Avatar
Stephane CHAZELAS
2008-07-29, 12:08(+00), Kevin Denis:
Le 29-07-2008, Stephane CHAZELAS a écrit :
j'essaie de réaliser un micro site web avec netcat et un script bash.


[...]
#! /bin/bash

echo "HTTP/1.0 200 OK"
echo "Content-Type: text/html; charset=ISO-8859-1"


[...]

printf '%srn'
'HTTP/1.0 200 OK'
'Content-Type: text/html; charset=ISO-8859-1'
''



Cela ne fonctionne pas mieux. Mais je ne comprends pas le but de la
manoeuvre (?).




Les lignes de header HTTP sont terminees par rn (CRLF), et les
headers sont terminés par une line vide (rnrn).

--
Stéphane
Avatar
Kevin Denis
Le 29-07-2008, Stephane CHAZELAS a écrit :
j'essaie de réaliser un micro site web avec netcat et un script bash.


[...]
#! /bin/bash

echo "HTTP/1.0 200 OK"
echo "Content-Type: text/html; charset=ISO-8859-1"


[...]

printf '%srn'
'HTTP/1.0 200 OK'
'Content-Type: text/html; charset=ISO-8859-1'
''



Cela ne fonctionne pas mieux. Mais je ne comprends pas le but de la
manoeuvre (?).



Les lignes de header HTTP sont terminees par rn (CRLF), et les
headers sont terminés par une line vide (rnrn).



Tout à fait, mais je pensais que echo faisait le travail. Et j'ai bien
une ligne vide entre les entetes et le debut du HTML:
echo "entete"
echo ""
echo "<HTMLW"
Néanmoins, ça ne fonctionne pas pour une raison qui m'échappe. Le
HTTP/1.0 n'est pas keepalive par défaut. Le client devrait télécharger
sa page, et s'arrêter là.
--
Kevin
Avatar
Stephane CHAZELAS
2008-07-29, 14:59(+00), Kevin Denis:
[...]
Néanmoins, ça ne fonctionne pas pour une raison qui m'échappe. Le
HTTP/1.0 n'est pas keepalive par défaut. Le client devrait télécharger
sa page, et s'arrêter là.



Ca marche chez moi avec elinks, w3m ou lynx.

--
Stéphane
Avatar
Kevin Denis
Le 29-07-2008, Stephane CHAZELAS a écrit :
[...]
Néanmoins, ça ne fonctionne pas pour une raison qui m'échappe. Le
HTTP/1.0 n'est pas keepalive par défaut. Le client devrait télécharger
sa page, et s'arrêter là.



Ca marche chez moi avec elinks, w3m ou lynx.



Bon, merci du retour. C'est fait avec la même ligne de commande netcat?
Et quelle version de netcat?
Je vais creuser un peu.
--
Kevin
Avatar
Stephane CHAZELAS
2008-07-29, 16:20(+00), Kevin Denis:
Le 29-07-2008, Stephane CHAZELAS a écrit :
[...]
Néanmoins, ça ne fonctionne pas pour une raison qui m'échappe. Le
HTTP/1.0 n'est pas keepalive par défaut. Le client devrait télécharger
sa page, et s'arrêter là.



Ca marche chez moi avec elinks, w3m ou lynx.



Bon, merci du retour. C'est fait avec la même ligne de commande netcat?
Et quelle version de netcat?
Je vais creuser un peu.



Oui, netcat 1.0-38 de debian.

Cela dit, netcat n'est pas un software de la meilleure qualité
qu'il soit et a ete patché de partout sur toutes les
distributions.

Tu peux essayer socat, ou /dev/tcp/... si ta distribution n'a
pas retiré cette fonctionalité de bash.

Sinon, tu as /dev/tcp dans AT&T ksh et zsocket dans zsh, et
(x)inetd et perl/tcl/python...

--
Stéphane
Avatar
Kevin Denis
Le 29-07-2008, Stephane CHAZELAS a écrit :
Ca marche chez moi avec elinks, w3m ou lynx.



Bon, merci du retour. C'est fait avec la même ligne de commande netcat?
Et quelle version de netcat?
Je vais creuser un peu.



Oui, netcat 1.0-38 de debian.

Cela dit, netcat n'est pas un software de la meilleure qualité
qu'il soit et a ete patché de partout sur toutes les
distributions.



Ok

Tu peux essayer socat,



Ok, je vais voir par là.

ou /dev/tcp/... si ta distribution n'a
pas retiré cette fonctionalité de bash.



on peut créer un serveur avec /dev/tcp ?
--
Kevin
Avatar
Kevin Denis
Le 30-07-2008, Kevin Denis a écrit :
Tu peux essayer socat,



Ok, je vais voir par là.



Et avec socat, ça fonctionne impeccable. Il a de plus pas mal
d'options intéressantes (comme le reuseaddr, fork)
--
Kevin