Система Orphus
[]

четверг, 19 февраля 2009 г.

port-check - чекаем порты без проблем или скрипт для проверки доступности портов


Нам, админам, довольно часто, точнее постоянно, приходится мониторить различные ресурсы своей сети и не редко удаленной. Если нет возможности поставить на хост средства мониторинга, то приходится проверить по портам. Раньше я это делал так:
netcat -w3 -z host port && echo OK
А что если нужно проверять несколько хостов и/или портов? Вот для этих целей и был написан скрипт.


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

Ниже приведена справка по использованию скрипта port-check.
$ port-check --help

Скрипт port-check проверяет на доступность указанные порты на указанных хостах.
Возвращает количество закрытых портов.

Использование:
port-check [-q|-v] host port
port-check [-q|-v] host "port1 .. portN"
port-check [-q|-v] "host1 .. hostN" port
port-check [-q|-v] "host1 .. hostN" "port1 .. portN"



-q, --quiet
Ничего не выводить

-v, --verbose
Выводить т.ж. открытые порты, иначе только закрытые и не доступные хосты

-V, --version
Показать версию

-h, --help
Показать эту справку
Все проще некуда =)

А вот несколько примеров работы скрипта:
$ port-check -v "mail.ru google.com 10.0.0.1 192.168.0.1" "80 443 ssh 21"
mail.ru:80 open
mail.ru:443 CLOSE!!!
mail.ru:ssh CLOSE!!!
mail.ru:21 CLOSE!!!
google.com:80 open
google.com:443 open
google.com:ssh CLOSE!!!
google.com:21 CLOSE!!!
Host 10.0.0.1 unreachable!!!
192.168.0.1:80 open
192.168.0.1:443 CLOSE!!!
192.168.0.1:ssh CLOSE!!!
192.168.0.1:21 open


$ port-check -v "mail.ru google.com 10.0.0.1 192.168.0.1" 80
mail.ru:80 open
google.com:80 open
Host 10.0.0.1 unreachable!!!
192.168.0.1:80 open


$ port-check -v mail.ru "80 443 ssh 21"
mail.ru:80 open
mail.ru:443 CLOSE!!!
mail.ru:ssh CLOSE!!!
mail.ru:21 CLOSE!!!


$ port-check -v 10.0.0.1 "80 443 ssh 21"
Host 10.0.0.1 unreachable!!!


$ port-check -q 10.0.0.1 "80 443 ssh 21"


$ port-check "mail.ru google.com 10.0.0.1 192.168.0.1" "80 443 ssh 21"
mail.ru:443 CLOSE!!!
mail.ru:ssh CLOSE!!!
mail.ru:21 CLOSE!!!
google.com:ssh CLOSE!!!
google.com:21 CLOSE!!!
Host 10.0.0.1 unreachable!!!
192.168.0.1:443 CLOSE!!!
192.168.0.1:ssh CLOSE!!!
Вот и все. Надеюсь все понятно и наглядно.

Скачать port-check можно по этой ссылке. Пользуйтесь на здоровье.

Почти каждая строка в скрипте прокомментирована. Уверен, что даже новичок сможет разобраться, как работает скрипт.
Скрипт писал довольно долго, много тестировал, поэтому версия сразу 1.0 и, скорее всего, финальная. Даже не представляю, что еще в него можно добавить...


Критика/комментарии/мнения/etc с радостью принимаются :)))


Похожие статьи

8 коммент.:

hubbitus комментирует... пятница, 20 февраля 2009 г., 10:50:00 GMT+2

А что, nmap не спасет отца русской демократии?

Angel 2S2 комментирует... пятница, 20 февраля 2009 г., 11:14:00 GMT+2

Хотя во многие дистры он входит по дефолту, но для таких целей его использовать...

Вот сравни:
$ nmap -p 80,21,ssh,https mail.ru google.ru 10.0.0.1 192.168.0.1

Starting Nmap 4.53 ( http://insecure.org ) at 2009-02-20 11:02 EET
Warning: Hostname mail.ru resolves to 4 IPs. Using 194.67.57.20.
Warning: Hostname google.ru resolves to 3 IPs. Using 216.239.59.104.
Interesting ports on mail.ru (194.67.57.20):
PORT STATE SERVICE
21/tcp filtered ftp
22/tcp filtered ssh
80/tcp open http
443/tcp filtered https

Interesting ports on 192.168.0.1:
PORT STATE SERVICE
21/tcp open ftp
22/tcp filtered ssh
80/tcp open http
443/tcp closed https

Nmap done: 4 IP addresses (2 hosts up) scanned in 4.214 seconds


$ port-check -v "mail.ru google.ru 10.0.0.1 192.168.0.1" "80 21 ssh https"
mail.ru:80 open
mail.ru:21 CLOSE!!!
mail.ru:ssh CLOSE!!!
mail.ru:https CLOSE!!!
google.ru:80 open
google.ru:21 CLOSE!!!
google.ru:ssh CLOSE!!!
google.ru:https open
Host 10.0.0.1 unreachable!!!
192.168.0.1:80 open
192.168.0.1:21 open
192.168.0.1:ssh CLOSE!!!
192.168.0.1:https CLOSE!!!


Что-то я не увидел в выводе NMap'а гугла... Проверим его пингом на доступность и убедимся, что он в сети:
$ ping -c 1 216.239.59.104
PING 216.239.59.104 (216.239.59.104) 56(84) bytes of data.
64 bytes from 216.239.59.104: icmp_seq=1 ttl=242 time=132 ms

--- 216.239.59.104 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 132.972/132.972/132.972/0.000 ms


Т.ж. замечал, что он (nmap) не всегда проверяет нормально порты, т.е. у меня были случаи когда я проверял порты на своих серверах и он мне говорил, что порты закрыты (либо, что хост не доступен), хотя все работало на ура (этот же netcat говорил, что все ок + коннект на нужный порт был).

Но NMap - это очень хороший и мощный инструмент, тут без спора.

hubbitus комментирует... пятница, 20 февраля 2009 г., 14:29:00 GMT+2

Про косяк не знаю, не замечал ни разу, если замечен был, может стоит фафиллить багу разработчикам?

А про "сравни" - сравнил, nmap сосем не меньше инфы дает, делает то же самое и много, много больше... Так зачем очередной самокат?

Angel 2S2 комментирует... пятница, 20 февраля 2009 г., 15:18:00 GMT+2

Мне нужно на выходе полчить кол-во закрытых портов, а уже в зависимости от этого числа кое-что сделать. Можно и вывод nmap распарсить, но netcat мне удобнее. + еще что-то, уже не припомню... что-то типа нужно было на кокой-то сервак мониторинг поставить, а nmap нельзя было там ставить (админ сервака не разрешал), вот и сделал скрипт. Короче тут много причин, по которым я его писал.

exn e комментирует... вторник, 24 февраля 2009 г., 7:41:00 GMT+2

Автор старался, молодец. От себя только добавлю

nc -w5 -z host port && echo OK || echo Fail

Angel 2S2 комментирует... вторник, 24 февраля 2009 г., 13:14:00 GMT+2

Этот вариант может не сработать...
Подробности тут:
http://bappoy.pp.ru/2008/12/24/bash-pitfalls-part04.html
Ищи совет №20: 20. cmd1 && cmd2 || cmd3

Или у меня в гугловых доках http://docs.google.com/Doc?id=dd5dc8n6_81dt8c5jfg , тут все части собраны в одну заметку.

TerAnYu комментирует... понедельник, 15 июля 2013 г., 10:33:00 GMT+3

Ух какой я некрофил, но скрипт полезный, хотелось бы реализацию 1.1, а в ней добавить возможность проверять UDP и TCP/UDP одновременно, либо возле списка портов указавыть тип.
Например надо проверить 80 22 TCP и 1194 53 udp, могло бы так выглядеть:
port-check 127.0.0.1 "1194-u 80-t"
или
port-check 127.0.0.1 "1194 53"-u "80 22"-t

Спасибо.

Roman Shagrov комментирует... понедельник, 15 июля 2013 г., 10:44:00 GMT+3

nc -w3 -vv -z -u host port

Отправить комментарий