Некоторое время назад я учился настраивать и выполнять nagios. Я рекомендовал бы вставить время и настроить его. Это действительно - ценный инструмент для предупреждения Вас, чтобы объединить в сеть и разместить проблемы. Можно выполнить его удаленно на сервере за ~ 30$ в месяц на сервер на сервере, законтрактованном с любимой услугой хостинга.
Я использую -w 1
ниже, чтобы ограничить таймауты до 1 секунды. Я также использую -v
по причинам, указанным в комментариях. Я использовал -n
, чтобы отказаться от задержек при обратном поиске DNS ...
[mpenning@tsunami ~]$ for i in $(echo "172.16.1.1,172.16.1.5"|tr "," "\n"); do echo -e "22\n80\n443\n8080" | xargs -i nc -w 1 -zvn $i {}; done
(UNKNOWN) [172.16.1.1] 22 (ssh) open
(UNKNOWN) [172.16.1.1] 80 (www) : Connection timed out
(UNKNOWN) [172.16.1.1] 443 (https) open
(UNKNOWN) [172.16.1.1] 8080 (http-alt) : Connection timed out
(UNKNOWN) [172.16.1.5] 22 (ssh) open
(UNKNOWN) [172.16.1.5] 80 (www) open
(UNKNOWN) [172.16.1.5] 443 (https) open
(UNKNOWN) [172.16.1.5] 8080 (http-alt) : Connection refused
[mpenning@tsunami ~]$
Netcat на самом деле не является сканером, так как комментарий предполагает, что Nmap будет лучшим вариантом здесь. Не используя параметр диапазона портов, я думаю, вам остается обернуть его в сценарий оболочки;
for host in $(cat hostlist); do
for port in $ports; do nc -z $host $port; done
done
и т. Д.
На Gentoo Linux (с установленным сетевым анализатором/netcat-110-r9):
$ nc -vz www.example.com 80 443
www.example.com [93.184.216.34] 80 (http) open
$ nc -vvz www.example.com 80 443
www.example.com [93.184.216.34] 80 (http) open
www.example.com [93.184.216.34] 443 (https) : Connection refused
Если вам нравится GNU Parallel так же, как и мне, попробуйте следующее:
parallel nc -vz host ::: 22 80 443 8080
Пример вывода:
Connection to foo.example.com 22 port [tcp/ssh] succeeded!
nc: connect to foo.example.com port 80 (tcp) failed: Connection refused
nc: connect to foo.example.com port 443 (tcp) failed: Connection refused
nc: connect to foo.example.com port 8080 (tcp) failed: Connection refused
Этот метод также быстрее в некоторых случаях, поскольку он тестирует подключение к портам параллельно, а не последовательно. В частности, здесь удаленный хост (или промежуточный брандмауэр) отбрасывает ваши пакеты, чтобы оставаться незаметным (в отличие от успешного подключения или принудительного отклонения).
Совет: в большинстве дистрибутивов Linux вы можете установить parallel
из вашего диспетчера пакетов.
Обновление: С помощью parallel
это очень хорошо обобщает часто необходимый случай с несколькими хостами x несколькими портами. В следующем примере используется parallel
для перебора перекрестного произведения, поэтому вам не нужно писать какие-либо вложенные циклы.
parallel nc -vz ::: host1 host2 host3 ::: 22 80 443 8080
Вывод:
Connection to host1 22 port [tcp/ssh] succeeded!
Connection to host1 80 port [tcp/http] succeeded!
Connection to host1 443 port [tcp/https] succeeded!
nc: connect to host1 port 8080 (tcp) failed: Connection refused
Connection to host2 22 port [tcp/ssh] succeeded!
nc: connect to host2 port 80 (tcp) failed: Connection refused
nc: connect to host2 port 443 (tcp) failed: Connection refused
nc: connect to host2 port 8080 (tcp) failed: Connection refused
Connection to host3 22 port [tcp/ssh] succeeded!
nc: connect to host3 port 80 (tcp) failed: Connection refused
nc: connect to host3 port 8080 (tcp) failed: Connection refused
nc: connect to host3 port 443 (tcp) failed: Connection refused
Как и в предыдущем примере, parallel
выполняет тесты соединения параллельно. Обратите внимание, что параллелизм по умолчанию - это количество потоков в вашей системе, но его можно легко изменить с помощью переключателя -j
на любое значение. Вы легко можете обойтись с помощью parallel -j 50 ...
или даже выше, поскольку тестирование сокетов не требует интенсивной работы ЦП.
В Redhat 6 вы можете запустить что-то вроде этого как настоящий однострочный:
nc -znv -w 2 <host> <port1>; nc -znv -w 2 <host> <port2>
-z тестирует порт
-n не разрешает DNS
-v дать подробный вывод
-w тайм-аут через 2 секунды
; ставит одну команду за другой, если вы не возражаете ввести ее снова.
Мне нравятся предложения по использованию цикла, если вы сканируете несколько портов, однако если это 2 или 3, и вы уже пытаетесь пройти цикл список с чем-то вроде SSH, можно использовать такие команды.