Найти тему
ИТ разнообразно

Прекратите использовать Telnet для тестирования портов. Часть 3.

Вы можете сделать это и в Bash тоже

Затем вы можете решить, что написание проверки TCP-порта на Bash вполне приемлемо:

#!/bin/bash -e
# Poor man TCP port scanner with Bash
# Author: Jose Vicente Nunez <@josevnz@fosstodon.org>
if [ -n "$1" ] && [ -f "$1" ]; then
while read -r line; do
machine=$(echo "$line"| /bin/cut -d' ' -f1)|| exit 100
ports=$(echo "$line"| /bin/cut -d' ' -f2)|| exit 101
OLD_IFS=$OLD_IFS
IFS=","
for port in $ports; do
if (echo >/dev/tcp/"$machine"/"$port") >/dev/null 2>&1; then
echo "OK: $machine -> $port"
else
echo "ERROR: $machine -> $port"
fi
done
IFS=$OLD_IFS
done < "$1"
else
echo "ERROR: Invalid or missing data file!"
exit 103
fi

Чистый скрипт Bash работает почти так же, как версия Expect:

$ ./tcp_port_scan.sh port_scan.csv
OK: google.com -> 80
OK: amazon.com -> 80
OK: raspberrypi -> 22
OK: raspberrypi -> 9090
OK: raspberrypi -> 8086
ERROR: raspberrypi -> 21
OK: dmaf5 -> 22
ERROR: dmaf5 -> 80

Он работает быстрее, чем версия с использованием Expect, потому что не требует создания отдельных сессий Telnet, но обработка ошибок сложна. Кроме того, он не справляется хорошо с фильтрованными портами.

Какие-нибудь другие варианты?

Например, что если вы хотите проверить соединение с хостом, находящимся за брандмауэром?

Продолжение следует...

Перевод с некоторыми авторскими заголовками.

Автор оригинала: Jose Vicente Nunez (Sudoer).