Я пытаюсь создать скрипт для проверки возможности входа через telnet. Я не хочу, чтобы действительно войти в систему; следовательно, ожидать не нужно. Я просто хочу посмотреть, смогу ли я получить приглашение для входа в систему. Это делается из системы Linux, поэтому я пытался использовать nc
:
nc 192.168.10.5 23 -w 1 | grep -q login
if [ $? -eq 1 ]
then
echo "console is down"
fi
Проблема в том, что это вызывает блокировку моей консоли. Кажется, что на -w
самом деле не разрывается соединение.
Я также пытался использовать telnet, но я не могу разорвать соединение внутри скрипта. Попытка
\echo "\035" | telnet 192.168.10.5
перерывы, прежде чем я получу приглашение на вход.
shell
shell-script
telnet
netcat
rleon
источник
источник
Ответы:
Bash предоставляет псевдо-устройства, с которыми вы, вероятно, знакомы, например
выдержка из справочной страницы Баша/dev/null
. Однако есть и другие устройства, такие как/dev/tcp
и/dev/udp
для тестирования сетевых подключений, которые вы также можете использовать в скриптах Bash.пример
Вот я тестирую соединение с хостом в моем домене с именем skinner и проверяю, могу ли я подключиться к его порту 22.
ПРИМЕЧАНИЕ. Порт 22 предназначен для SSH, для telnet используется порт 23.
Отлично, так что давайте попробуем не порт:
Ну, это работает, но это ужасно уродливый вывод. Не беспокоиться. Вы можете запустить
echo > /dev/tcp/...
в подоболочке и перенаправить весь вывод, чтобы/dev/null
немного его очистить. Вот шаблон, который вы можете использовать в своих сценариях оболочки:источник
telnet
, то по умолчанию он работает на порту 23, поэтому там, где slm использовал 22 и 223, используйте 23.# telnet 192.168.10.5 Trying 192.168.10.5... Connected to 192.168.10.5 (192.168.10.5). Escape character is '^]'. Connection closed by foreign host.
# cat < /dev/tcp/192.168.10.12/23
дает мне приглашение на вход в систему, но я не могу выйти из него.# cat afile ^]
после запуска это просто повторяет разрывafile
. Все еще играю с этим, но я чувствую, что почти там.Вы на правильном пути, используя
nc
, но если вы действительно хотите просто проверить, можете ли вы установить соединение, используйте переключатель nc-z
:источник
nc
это?nc
.Я знаю, что ответ немного запоздал, но я искал, как это сделать, и использование nc не было вариантом по соображениям безопасности, так что вот оно, если оно может кому-то помочь.
Чего не хватало в вашем первоначальном эхо, так это ключа -e:
И новая строка + команда quit для выхода из telnet после отключения. В качестве таких:
Очевидно, то же самое сработает, если вы используете блочный стиль if и вычисляете $? как вы делали изначально:
Что касается nc, то это зависит от того, какой у вас nc (gnu ncat против nmap-ncat). У GNU будет ключ -z:
в то время как другой не будет, и вам придется передать пустую строку вашему nc, чтобы не застрять:
источник
запустить
nc -z 192.168.10.5 23
в командной строке или создать сценарий bash для запуска этой команды.Он возвращает оператор ниже, если соединение установлено успешно.
Подключение к 232 порту 192.168.10.5 [tcp / *] успешно завершено!
источник