Почему этот фрагмент оболочки проверяет, были ли хосты запущены с отключением 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, который, в отличие от добавления?
  • трубы socat в трубу для нескольких операций open-write-close и open-read-close
  • Половинное соединение netcat
  • ZFS Отправить в Pigz, netcat
  • именованный прокси-сервер через SSH
  • Убедитесь, что файловый сокет уже открыт
  • NetCat никогда не заканчивает http-сеанс
  • Использование стрелки вверх для получения предыдущей команды в netcat
  • Как временно сопоставить удаленный хост и порт с локальным портом?
  • Есть ли способ прослушивания netcat и размещения входящих файлов в целевом каталоге?
  • как получить espeak, чтобы постоянно говорить stdout, переданный из netcat
  • Как сделать netcat печатать красочный текст?
  • Interesting Posts

    Ошибка переменной среды Bash

    Xlib: Протокол не указан

    как вставить пробел между отдельными цифрами в файле?

    могу ли я использовать логические операторы для удаления всех файлов, которые соответствуют одному и / или другому шаблону в одной строке?

    Какой диапазон портов будет использовать ipfw nat для псевдонимов?

    Не удалось apt-get обновить mariadb, но dist-upgrade работает? почему это?

    Как открыть окна вкладок в Gnu-screen и выполнить команды в каждом из них

    Как правильно распределять пропускную способность между IP-адресами с помощью tc?

    Узнайте, что драйвер установлен правильно

    пользователи не могут выполнить su для другого пользователя LDAP

    Строки трубопроводов различного поведения для сортировки и grep

    доступ к внешнему жесткому диску для удаления папки на терминале Mac

    Загрузите Linux Mint с USB в режиме устаревания

    «Сбор» файлов для дальнейшей обработки

    shell для возврата имени рабочего стола kde

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