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це працювало?

EDIT

ось повний сценарій:

#!/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іншого інструменту?
мрб

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

Цей сценарій є стороною прослуховування. Чи можете ви також розмістити клієнтську сторону?
jw013

Відповіді:


6

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

Ця команда прослуховуватиме в localhostмережевому інтерфейсі (і буде ігнорувати запити з інших інтерфейсів, як-от ваша 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"
'

Якщо ви хочете слухати запити на всіх інтерфейсах, ви можете повністю скинути -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.