netcat w skrypcie powłoki, podając nieprawidłowe połączenie


13

Mam skrypt powłoki, który używa netcatdo nasłuchiwania localhostna porcie 1111 dla żądań internetowych. Za każdym razem, gdy próbuję uzyskać dostęp localhost:1111/index.html, otrzymuję:

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

liczba na końcu (60038) wydaje się zwiększać za każdym razem, gdy uzyskuję dostęp localhost.

Wszelkie sugestie dotyczące tego, co się dzieje nie tak? A jaki jest default localhostkatalog? Gdzie powinienem umieścić index.htmltak, localhost:1111/index.htmlaby działało?

EDYTOWAĆ

oto pełny skrypt:

#!/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

Liczba na końcu to port źródłowy, który jest wybierany losowo; jest to port używany przez przeglądarkę do otwierania wychodzącego żądania. Nie martw się o to. Czy możesz opublikować swoją netcatlinię poleceń? Czy komunikat „nieprawidłowe połączenie” pochodzi z netcatinnego narzędzia?
— mrb

Właśnie dodałem pełny skrypt. Nie jestem pewien, czy netcat przekazuje komunikat, może być ustawiony. Nie jestem pewien, co to za zestaw!
— MinaHany

Ten scenariusz jest stroną odsłuchową. Czy możesz również opublikować stronę klienta?
— jw013,

Odpowiedzi:


6

Twój oryginalny skrypt wymaga, aby połączenie pochodziło od hosta o nazwie localhost, ale z jakiegoś powodu filtrowanie nie działa. Niezwykłe, ponieważ pasuje dokładnie do nazwy wymienionej w błędzie:invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

To polecenie nasłuchuje na localhostinterfejsie sieciowym (i zignoruje żądania z innych interfejsów, takich jak sieć 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"
'

Jeśli chcesz nasłuchiwać żądań na wszystkich interfejsach, możesz -scałkowicie upuścić część:

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

W moim systemie, jeśli chcę zrobić tego samego rodzaju hosta źródłowego bez filtrowania -s, muszę użyć jednej 127.0.0.1lub localhost.localdomain:

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

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

W każdym razie jedna z powyższych opcji powinna działać dla Ciebie:

$ 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
$

Wielkie dzięki! zmiana localhost na 127.0.0.1 wydawała się załatwić sprawę w Firefoksie. Chyba wszystko wygląda inaczej.
— MinaHany,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.