Netcat не работает (по крайней мере, не то, что я могу сказать)

Прошлой ночью я обнаружил, что netcat ведет себя ... ну, как ни странно, если не сказать больше. При вызове (я не использовал флаги, только базовый "netcat [hostname] [номер порта]), он будет делать одну из двух вещей в зависимости от того, что его использует. То есть он будет вести себя немного по-другому, если я запускаю bash Сценарий, использующий netcat, в отличие от использования его в командной строке. Сценарий, который также использует echo для подачи запроса HEAD на порт 80, будет запрашивать ввод данных пользователем в обычном режиме. Однако сразу после нажатия клавиши enter скрипт будет немедленно завершите и верните меня в командную строку. Однако в командной строке вызов netcat с именем хоста и номером порта начнет новую строку без командной строки. Через несколько секунд он перейдет к следующей строке, и я вернуть командную строку. Короче говоря, я попытался исправить это с помощью sudo, чтобы удалить файлы netcat из / bin / (задним числом, я не уверен, почему я думал, что это поможет), прежде чем сразу же понять, что у меня есть облажался и ни разу не зарезервировал, поэтому я переустановил ВМ, которая вернула netcat в рабочее состояние. По крайней мере, до jus т, потому что он снова делает то же самое. Есть ли что-то, что я могу сделать, чтобы устранить эту проблему?
РЕДАКТИРОВАТЬ: Я не понимал, что я все еще работаю 13.04, который может (я надеюсь) иметь какое-то отношение к неработающему netcat. Как только у меня будет запущена версия 14.04, я посмотрю, работает ли netcat снова, а затем снова отредактирую вопрос, чтобы поделиться результатами. Если это сработает, я также подожду один или два дня, чтобы увидеть, появится ли проблема снова. Если этого не произойдет, я добавлю ответ.
РЕДАКТИРОВАТЬ: Теперь я очень смущен. Netcat продолжал вести себя так же после того, как я обновился до 14.04. Хуже того, проблема не была устранена, даже временно, путем переустановки 14.04 через .iso. Если кто-нибудь может помочь мне исправить это, я был бы чрезвычайно благодарен.

0
задан 10 July 2014 в 20:32

1 ответ

Ваш пример, INPUT=hostname; echo -e "HEAD / HTTP/1.1\nhost: $INPUT\n\n" | nc $INPUT 80, работы в командной строке (шоу хорошо следуют из сервера), но не, когда они вставляются в сценарий, содержа просто строку (показывает плохую ошибку запроса с сервера).

Это вызывается хитрым несовместимость оболочки связанный с dash:

Вы выполняете сценарий оболочки с минималистической оболочкой /bin/dash - который также связан как /bin/sh, оболочка по умолчанию. Это используется, когда нет никакой строки "хижины", или #!/bin/sh.

проблема вызывается bu echo встроенная команда тире, который не поддерживает -e опция. Эти -e буквально передается как часть Запроса HTTP - который заставляет сервер возвращать ошибку "400 Плохих Запросов".

Для фиксации используйте bash вместо dash, например, при помощи первой строки сценария #!/bin/bash

0
ответ дан 10 July 2014 в 20:32

Другие вопросы по тегам:

Похожие вопросы: