Почему этот фрагмент оболочки проверяет, были ли хосты запущены с отключением netcat преждевременно?

В: Почему вторая итерация выходит после 10.175.192.16? Может ли кто-нибудь объяснить это? Или я просто нашел ошибку «while / netcat»?

Содержание a.txt:

$ cat a.txt 10.175.192.14 10.175.192.16 10.175.192.17 $ 

Первая итерация, это нормально, просто выводит содержимое файла:

 $ while read oneline; do echo $oneline; done < a.txt 10.175.192.14 10.175.192.16 10.175.192.17 $ 

Вторая итерация, это плохо, она существует при приближении к 10.175.192.16:

 $ while read oneline; do nc -w 3 "$oneline" 22 >& /dev/null; echo $oneline; done < a.txt 10.175.192.14 10.175.192.16 $ 

Коды выхода:

 $ nc -w 3 "10.175.192.14" 22 >& /dev/null; echo $? 1 $ nc -w 3 "10.175.192.16" 22 >& /dev/null; echo $? 0 

Таким образом, нет SSH-сервера за 10.175.192.14. Но есть один за 10.175.192.16. Но итерация «пока» не должна выходить, прежде чем проходить через все линии, нет? Почему он пропустил 10.175.192.17? Что мне здесь не хватает?

Моя основная цель заключается в том, что у меня есть файл (a.txt), содержащий IP-адреса. Мне нужно отсортировать эти IP-адреса в двух файлах:

A) Те, которые достижимы (ssh запрашивает, поэтому сервер доступен)
B) То, что недоступно (тайм-аут через 3 секунды, потому что на порту 22 ничего не слышно)

«достижимый» означает, что есть что-то, что прослушивает порт 22 за IP.

2 Solutions collect form web for “Почему этот фрагмент оболочки проверяет, были ли хосты запущены с отключением netcat преждевременно?”

Я думаю, что у меня есть ответ: когда nc пытается получить IP-адрес с сервером, который прослушивает порт 22 (который обычно является SSH-сервером), он считывает остальную часть ввода и передает ее серверу на порт 22. Сервер SSH I работают на моих домашних машинах, просто ест вход.

У nc I (система Slackware 13.1) есть опция «-z», для «нулевого ввода-вывода». Пытаться

 nc -z -w 3 "$oneline" >& /dev/null 

как команда в вашем while-loop. Я думаю, что существуют другие nc реализации. Например, есть netcat GNU, но он также имеет параметр «-z».

Может быть, ломается, что у вас есть специальный символ в конце 10.175.192.16? Вы можете попытаться проанализировать файл без команды «читать»:

 HOSTS=`cat a.txt` for host in $HOSTS; do code=`nc -w 3 -z "$host" 22 >& /dev/null; echo $?` if [ "$code" == "0" ]; then echo $host >> reachable.txt else echo $host >> unreachable.txt fi done 
  • Удаленная мышь netcat (/ dev / input / mice)
  • netcat в сценарии оболочки, дающий недействительное соединение
  • Пустой ответ на HTTP-запрос с netcat
  • / dev / tcp прослушать вместо nc listen
  • Как временно сопоставить удаленный хост и порт с локальным портом?
  • Нужна помощь с использованием Netcat
  • Половинное соединение netcat
  • Netcat работает не так, как ожидалось, при удаленном выполнении в неинтерактивной оболочке
  • Повторное соединение mysql через внешнюю машину
  • Использование netcat для запуска программы?
  • netcat для захвата Ethernet
  • Interesting Posts

    Есть ли способ разработки сценариев выскочки на Fedora 21?

    Как использовать tune2fs в dd?

    Начальная последовательность движения – модификация скрипта оболочки

    Почему systemd отключает мои файловые системы с предохранителями сразу после их установки?

    Tmux не масштабируется, чтобы заполнить окно

    Единственный случай – это бесперебойный сон?

    Установите переменную окружения автоматически после входа в систему SSH (без доступа root)

    Подстановка первого вхождения шаблона в строку, для всех строк в файле с sed

    Denyhosts: как всегда разрешать некоторым известным пользователям?

    Обновить / перезагрузить активную вкладку браузера из командной строки?

    Как заставить пользовательскую цветовую схему при использовании Inverted Colors в Evince?

    Давать / var / www файлы доступа к www-данным и моему пользователю?

    Первый щелчок на меню Linux Mint не открывает его

    Как передать аргумент командной строки в сценарий оболочки?

    Отладка ядра Linux с помощью QEMU

    Linux и Unix - лучшая ОС в мире.