2013-09-02 2 views
2

У меня возникла небольшая проблема при использовании утилиты nc в Mac OS X, которая часто используется в качестве быстрого и грязного решения, чтобы проверить, открыт ли порт и какая версия запускается.nc (netcat) на Mac OS X 10.8.4 застрял

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

Это команда я побежал, и полученный результат:

$ for i in {183..200}; do echo "hello" | nc -n -w 2 -v 10.120.113.$i 22; done 
Connection to 10.120.113.183 22 port [tcp/*] succeeded! 
SSH-2.0-OpenSSH_5.9 
Protocol mismatch. 
nc: connect to 10.120.113.184 port 22 (tcp) failed: Connection refused 
^C 
$ 

Он находит первую машину на 183 и возвращает версию демона, он не смотрит как SSHD запущенного на 184, но когда она попадает 185 он просто останавливается, и я должен убить его с помощью ctrl + c.

Как я понял, справочная страница для nc должна быть отключена при использовании переключателя '-w', но это не так. Это та же проблема с нескольких машин.

Это просто случай с неправильным пониманием страницы руководства? Есть ли другой способ сделать nc тайм-аут после X секунд, если не получите никакого ответа? Есть ли другой способ сделать это, используя встроенные инструменты в Mac OS X?

Я также попытался запустить nc только с переключателем '-z' с теми же результатами. Машины размещены в нашем производстве, поэтому мне не разрешено устанавливать какие-либо сторонние приложения, такие как nmap.

Platform: Mac OS X 10.8.4 
Executable: /usr/bin/nc 

Извините, если на этот вопрос был дан ответ, я искал, но не смог найти решение этого вопроса.

+0

Я думаю, что есть ошибка в нк на Mac. У меня есть Йосемити. Когда я сравниваю ту же команду в Linux для проксирования DNS, Linux возвращает ответ снова и снова, как и следовало ожидать. На Mac он возвращает первый ответ, а затем замялся, потому что я предполагаю, что он не видит конца передачи. Посмотрите сами: 'mkfifo/tmp/fifo; nc -lu 127.0.0.1 53/tmp/fifo', а затем в другом окне терминала, выполните 'nslookup example.com 127.0.0.1' более одного раза. – Volomike

ответ

2

Я попробовал это на моем Mac работает 10.8.4 и примерно через 6 минут он смотрел, как:

andys-MacBook-Pro:EquipDB uw$ for i in {183..200}; do echo "hello" | nc -n -w 2 -v 10.120.113.$i 22; done 
nc: connect to 10.120.113.183 port 22 (tcp) failed: Operation timed out 
nc: connect to 10.120.113.184 port 22 (tcp) failed: Operation timed out 
nc: connect to 10.120.113.185 port 22 (tcp) failed: Operation timed out 
nc: connect to 10.120.113.185 port 22 (tcp) failed: Operation timed out 

Так что таймаут на шахте, но только занимает некоторое время.

Хммм ... думал, что мой тест будет бессмысленным, потому что я никогда не свяжусь с чем-то, потому что я не в вашей сети. Но я вижу это:

-w # => Тайм-аут после # секунд

Обратите внимание, что -w также устанавливает тайм-аут сети неактивности. Это не будет иметь никакого эффекта до тех пор, пока стандартный ввод не будет закрыт, но если в ближайшие секунды ничего не поступит из сети, netcat попытается прочитать сеть еще раз для хорошей меры, а затем закроется и выйдет. Сейчас есть много сетевых сервисов, которые принимают небольшой объем ввода и возвращают большой объем вывода, такой как Gopher и веб-серверы, что является основной причиной, по которой netcat был написан для «блокировки» в сети, остающейся открытой, чем стандартный ввод. Обработка тайм-аута таким образом дает единообразное поведение с сетевыми серверами, которые не делают рядом друг с другом, пока не сказали.

Это работает для окончательного чтения сети, но не для соединений.

Если я понимаю это право, он только раз подряд, когда он подключается, так как мой никогда не подключается, он имеет встроенный тайм-аут, который не имеет никакого отношения к -w? найдено here, полезно?

+0

Спасибо за ответ. Я заметил то же самое, nc кажется тайм-аутом после aprox. 90sec. Думаю, теперь вопрос заключается в том, есть ли способ заставить nc тайм-аут меньше, чем это. – ZombieNinjaPirate

+1

Решил написать небольшой скрипт, который обновляет кеш arp на моем клиенте, прежде чем проверять открытые порты/версии службы, это предоставит мне список используемых IP-адресов. В дополнение к этому я вытащу версию обновления настраиваемого сценария запуска, которая запретит пользователям отключать системные настройки sshd. Это должно препятствовать подключению nc к несуществующим IP-адресам и клиентам с отключенным sshd. Я знаю, что это не решит проблему, но я очень оценил ваши отзывы, спасибо, Beartech! – ZombieNinjaPirate

6

Я считаю, что вы ищете вариант -G. На страницах руководства:

-G conntimeout Тайм-аут соединения TCP в секундах.

выше сообщение правильно указывает, что -w устанавливает тайм-аут после соединения. опция -G используется для установки таймаута до. Это должно дать вам то, что вы хотите

nc -n -G 2 -v xxx.xxx.xxx.xxx 22 

/конец нити воскрешение

Смежные вопросы