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.