netcat dans un script shell donnant une connexion invalide

13

J'ai un script shell qui utilise netcatpour écouter sur localhostle port 1111 pour les requêtes Web. Chaque fois que j'essaie d'accéder localhost:1111/index.htmlpar exemple, j'obtiens:

invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

le nombre à la fin (60038) semble augmenter à chaque fois que j'accède localhost.

Des suggestions sur ce qui ne va pas? Et quel est le default localhostrépertoire? Où dois-je mettre un index.htmlpour que localhost:1111/index.htmlcela fonctionne?

ÉDITER

voici le script complet:

#!/bin/sh
while true
do
netcat -vvl localhost -p 1111 -c '
    set -x
    read http_request
    echo HTTP/1.0 200 OK
    echo
    echo "Received HTTP request: $http_request"
'   
done
MinaHany
la source
Le numéro à la fin est le port source, qui est choisi au hasard; c'est le port utilisé par votre navigateur pour ouvrir la demande sortante. Ne t'en fais pas. Pouvez-vous publier votre netcatligne de commande? Le message «connexion non valide» provient-il d' netcatun autre outil?
mrb
Je viens d'ajouter le script complet. Je ne sais pas si netcat donne le message, il peut être défini. Je ne sais pas quel ensemble fait même!
MinaHany
Ce script est le côté écoute. Pouvez-vous également publier le côté client?
jw013

Réponses:

6

Votre script d'origine nécessite que la connexion provienne d'un hôte nommé localhost, mais pour une raison quelconque, le filtrage échoue. Insolite, car il correspond exactement au nom répertorié dans l'erreur:invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

Cette commande écoutera sur l' localhostinterface réseau (et ignorera les demandes d'autres interfaces, comme votre LAN):

netcat -vvl -s localhost -p 1111 -c '
    set -x
    read http_request
    echo HTTP/1.0 200 OK
    echo
    echo "Received HTTP request: $http_request"
'

Si vous souhaitez écouter les demandes sur toutes les interfaces, vous pouvez supprimer -scomplètement la partie:

netcat -vvl -p 1111 -c '...'

Sur mon système, si je veux faire le même genre d'hôte source sans filtrage -s, je dois utiliser soit 127.0.0.1ou localhost.localdomain:

netcat -vvl localhost.localdomain -p 1111 -c '...'

netcat -vvl 127.0.0.1 -p 1111 -c '...'

Dans tous les cas, l'une des options ci-dessus devrait fonctionner pour vous:

$ netcat -vvl 127.0.0.1 -p 1111 -c '
quote>     set -x
quote>     read http_request
quote>     echo HTTP/1.0 200 OK
quote>     echo
quote>     echo "Received HTTP request: $http_request"
quote> '
listening on [any] 1111 ...
connect to [127.0.0.1] from localhost.localdomain [127.0.0.1] 35368
+ read http_request
+ echo HTTP/1.0 200 OK
+ echo
+ echo Received HTTP request: GET / HTTP/1.1
$
mrb
la source
Merci beaucoup! changer localhost en 127.0.0.1 semblait faire l'affaire sur firefox. Chrome gère les choses différemment, je suppose.
MinaHany