Исследование нескольких портов при выполнении NetCat (nc)

Некоторое время назад я учился настраивать и выполнять nagios. Я рекомендовал бы вставить время и настроить его. Это действительно - ценный инструмент для предупреждения Вас, чтобы объединить в сеть и разместить проблемы. Можно выполнить его удаленно на сервере за ~ 30$ в месяц на сервер на сервере, законтрактованном с любимой услугой хостинга.

7
задан 14 August 2012 в 07:22
5 ответов

Я использую -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 ~]$
5
ответ дан 2 December 2019 в 23:28

Netcat на самом деле не является сканером, так как комментарий предполагает, что Nmap будет лучшим вариантом здесь. Не используя параметр диапазона портов, я думаю, вам остается обернуть его в сценарий оболочки;

    for host in $(cat hostlist); do
        for port in $ports; do nc -z $host $port; done
    done

и т. Д.

1
ответ дан 2 December 2019 в 23:28

На 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
1
ответ дан 2 December 2019 в 23:28

Если вам нравится 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 ... или даже выше, поскольку тестирование сокетов не требует интенсивной работы ЦП.

3
ответ дан 2 December 2019 в 23:28

В Redhat 6 вы можете запустить что-то вроде этого как настоящий однострочный:

nc -znv -w 2 <host> <port1>; nc -znv -w 2 <host> <port2>

-z тестирует порт
-n не разрешает DNS
-v дать подробный вывод
-w тайм-аут через 2 секунды
; ставит одну команду за другой, если вы не возражаете ввести ее снова.

Мне нравятся предложения по использованию цикла, если вы сканируете несколько портов, однако если это 2 или 3, и вы уже пытаетесь пройти цикл список с чем-то вроде SSH, можно использовать такие команды.

1
ответ дан 2 December 2019 в 23:28

Теги

Похожие вопросы