Netcat в сценарии оболочки дает неверное соединение


13

У меня есть сценарий оболочки, который использует netcatдля прослушивания localhostна порт 1111 для веб-запросов. Каждый раз, когда я пытаюсь получить доступ, localhost:1111/index.htmlнапример, я получаю:

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

число в конце (60038), кажется, увеличивается каждый раз, когда я получаю доступ localhost.

Любые предложения о том, что идет не так? А что это за default localhostкаталог? Где я должен положить index.htmlтак, чтобы localhost:1111/index.htmlэто работало?

РЕДАКТИРОВАТЬ

вот полный скрипт:

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

Номер в конце - это порт источника, который выбирается случайным образом; это порт, используемый вашим браузером для открытия исходящего запроса. Не беспокойся об этом. Можете ли вы опубликовать свою netcatкомандную строку? Сообщение «недопустимое соединение» приходит от netcatдругого инструмента?
mrb

Я только что добавил полный скрипт. Я не уверен, что netcat дает сообщение, оно может быть установлено. Я не уверен, что набор даже делает, хотя!
MinaHany

Этот сценарий является слушающей стороной. Вы также можете разместить на стороне клиента?
jw013

Ответы:


6

Ваш оригинальный сценарий требует, чтобы соединение исходило от хоста с именем localhost, но по какой-то причине фильтрация не удалась. Необычно, потому что оно точно соответствует названию, указанному в ошибке:invalid connection to [127.0.0.1] from localhost [127.0.0.1] 60038

Эта команда будет прослушивать localhostсетевой интерфейс (и будет игнорировать запросы от других интерфейсов, таких как ваша локальная сеть):

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"
'

Если вы хотите прослушивать запросы на всех интерфейсах, вы можете полностью отбросить -sчасть:

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

В моей системе, если я хочу сделать такое же исходный узел фильтрации без -s, мне нужно использовать либо 127.0.0.1или localhost.localdomain:

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

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

В любом случае, один из вышеперечисленных вариантов должен работать для вас:

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

Большое спасибо! изменение localhost на 127.0.0.1, похоже, помогло Firefox. Я полагаю, что в Chrome все по-другому.
MinaHany
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.