serveur web avec netcat et bash

Le
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:8080connecté.
requête HTTP transmise, en attente de la réponse200 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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane CHAZELAS
Le #16433521
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
Kevin Denis
Le #16433951
Le 29-07-2008, Stephane CHAZELAS
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
Stephane CHAZELAS
Le #16434281
2008-07-29, 12:08(+00), Kevin Denis:
Le 29-07-2008, Stephane CHAZELAS
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
Kevin Denis
Le #16434931
Le 29-07-2008, Stephane CHAZELAS
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
Stephane CHAZELAS
Le #16435101
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
Kevin Denis
Le #16435631
Le 29-07-2008, Stephane CHAZELAS
[...]
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
Stephane CHAZELAS
Le #16436531
2008-07-29, 16:20(+00), Kevin Denis:
Le 29-07-2008, Stephane CHAZELAS
[...]
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
Kevin Denis
Le #16440621
Le 29-07-2008, Stephane CHAZELAS
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
Kevin Denis
Le #16446871
Le 30-07-2008, Kevin Denis
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
Publicité
Poster une réponse
Anonyme