Цель написания скрипта проста - возможность проверить несколько портов на одном и более хосте одной командой. Про существование различных программ я знаю, но не нашел подходящего для себя решения, поэтому написал свой скрипт основанный на 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 коммент.:
А что, nmap не спасет отца русской демократии?
Хотя во многие дистры он входит по дефолту, но для таких целей его использовать...
Вот сравни:
$ 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 - это очень хороший и мощный инструмент, тут без спора.
Про косяк не знаю, не замечал ни разу, если замечен был, может стоит фафиллить багу разработчикам?
А про "сравни" - сравнил, nmap сосем не меньше инфы дает, делает то же самое и много, много больше... Так зачем очередной самокат?
Мне нужно на выходе полчить кол-во закрытых портов, а уже в зависимости от этого числа кое-что сделать. Можно и вывод nmap распарсить, но netcat мне удобнее. + еще что-то, уже не припомню... что-то типа нужно было на кокой-то сервак мониторинг поставить, а nmap нельзя было там ставить (админ сервака не разрешал), вот и сделал скрипт. Короче тут много причин, по которым я его писал.
Автор старался, молодец. От себя только добавлю
nc -w5 -z host port && echo OK || echo Fail
Этот вариант может не сработать...
Подробности тут:
http://bappoy.pp.ru/2008/12/24/bash-pitfalls-part04.html
Ищи совет №20: 20. cmd1 && cmd2 || cmd3
Или у меня в гугловых доках http://docs.google.com/Doc?id=dd5dc8n6_81dt8c5jfg , тут все части собраны в одну заметку.
Ух какой я некрофил, но скрипт полезный, хотелось бы реализацию 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
Спасибо.
nc -w3 -vv -z -u host port
Отправить комментарий