2015-05-06 4 views
3

Я попробовал эту команду, чтобы попытаться найти неиспользуемые порты. То, что я хочу, это запустить netcat в ряде портов, найти те, которые не запускают службы, grep первый из этих строк вывода, а затем использовать sed для вывода только номера порта.Как получить Netcat для возврата неиспользуемых портов

nc -z <my url> 5000-5010 | grep -m 1 succeeded | sed 's/[^0-9]//g' 

Но когда я пытаюсь запустить службу, используя порт, который возвращается, я получаю сообщение о том, порт в данный момент используется.

я узнал, что успех NetCat означает сервис работает на порту, но когда я пытаюсь это вместо

nc -zv <my url> 5000-5010 | grep -m 1 failed | sed 's/[^0-9]//g' 

я ничего не получаю, хотя большинство строк вывода содержат слово не удалось.

Пройдя по страницам человека, выяснилось, что netcat -z возвращает результат только для успешных результатов, хотя причина, по которой строка после неудачного соединения появляется в моем окне терминала, все еще находится вне меня.

Как я могу использовать netcat для просмотра первого порта, на котором не удалось выполнить соединение?

+3

Вы можете захотеть исследовать [птар] (https://nmap.org/), которая представляет собой инструмент сканирования сети, которая была бы, вероятно, сделать эту задачу гораздо проще , – larsks

ответ

1

Команда nc -v записывает неудавшиеся/удаленные сообщения на стандартную ошибку, а не на стандартный вывод. Вы можете перенаправить stderr на stdout с помощью 2>&1.

nc -zv <my url> 5000-5010 2>&1 | grep -m 1 failed 

, чтобы получить неисправную линию.

См http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/

Кстати, я предлагаю вам использовать AWK, чтобы получить номер порта от линии выхода:

nc -zv <my url> 5000-5010 2>&1 | grep -m 1 failed | awk '{print $6}' 

, который печатает значение в 6-ом столбце выходной линии.

2

Чтобы получить список закрытых (неиспользованных) портов на системе Linux вы можете использовать:

Realtime Выход:

#!/bin/bash 
remoteHost=stackoverflow.com 
for i in {80..100} 
do 
    nc -v -z -w 1 $remoteHost $i &> /dev/null && echo "Port $i Open" || echo "Port $i Closed" 
done 

Вы можете изменить тайм-аут, в настоящее время устанавливается на 1 сек (-w 1) , если необходимо, более высокое значение.


Выход:

Port 80 Open 
Port 81 Closed 
Port 82 Closed 
Port 83 Closed 
Port 84 Closed 
Port 85 Closed 
etc.. 

nc аргументы:

-v Have н.д. дают более подробный вывод.

-z Указывает, что nc должен просто сканировать для прослушивания демонов, не отправляя им никаких данных. Ошибка использования этой опции в сочетании с опцией -l.

-w тайм-аут Если соединение и stdin простаивают больше секунд ожидания, соединение тихо закрывается. Флаг -w не влияет на параметр -l, т. Е.nc будет постоянно слушать связь с флагом -w или без него. По умолчанию нет таймаута.


Ресурсы

nc man