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


angel2s2 аватар

angel2s2 - Posted on 19 Февраль 2009

Нам, админам, довольно часто, точнее постоянно, приходится мониторить различные ресурсы своей сети и не редко удаленной. Если нет возможности поставить на хост средства мониторинга, то приходится проверить по портам. Раньше я это делал так:

$ 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 с радостью принимаются :)))

0
Ваша оценка: Ничего

LOL oй живот болит
тут типо порты >>> 80 443 ssh 21

O_o не знал что так возможно

$:nc -v -z mail.ru www
mail.ru [194.67.57.226] 80 (www) open

Ж:-)
век живи, век rtfm
смотри в /etc/services

а откуда я думаешь выдираю поты? нехитрые превращения с cat grep и awk )

+1 :-)

автор не знает про nmap?

Автор знает про 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 а не напрямую с сетью.

// darkk, у которого openid с ЖЖ глючит :-(

--unprivileged: Assume the user lacks raw socket privileges
© man nmap

// darkk

Никогда от рута его не запускал. К тому же $ в начале всех этих команд о чем говорит? :-)
Пакеты не потерялись, т.к.проверял несколько раз с двух разных машин и всё время такая фигня. Может это только в моей сети, но все же... Как нибудь проверю из другой сети.

Ну вообще то с портами ты промахнулся

ramok5012pts/32<~/ nc -v -z 127.0.0.1 20-23
localhost [127.0.0.1] 23 (telnet) open
localhost [127.0.0.1] 22 (ssh) open
localhost [127.0.0.1] 21 (ftp) open
ramok5013pts/32<~/ nc -vv -z 127.0.0.1 80 443 ssh 21
localhost [127.0.0.1] 80 (www) open
localhost [127.0.0.1] 443 (https) : Connection refused
localhost [127.0.0.1] 22 (ssh) open
localhost [127.0.0.1] 21 (ftp) open
 sent 0, rcvd 0

А с кучей хостов это правда будет полезно.
Внутрь скрипта пока не смотрел.

да для быстрого тыканья nc|netcat
+1

О черт, совсем забыл про это... Спасибо, что напомнил. :)
Хотя нет, не забыл. Сделал именно так (как в скрипте), чтобы можно было отслеживать кол-во закрытых портов, т.е. чтобы скрипт это кол-во возвращал.

И, кстати, можно делать так:

$ nc -v -z -w3 mail.ru 80 21-25
mail.ru [194.67.57.26] 80 (www) open
mail.ru [194.67.57.26] 25 (smtp) : Connection timed out
mail.ru [194.67.57.26] 24 (?) : Connection timed out
mail.ru [194.67.57.26] 23 (telnet) : Connection timed out
mail.ru [194.67.57.26] 22 (ssh) : Connection timed out
mail.ru [194.67.57.26] 21 (ftp) : Connection timed out

Что-то я ступил реально... Тут же можно их простой "фильтрацией" вывода подсчитать. Во вторник выложу обновленный.

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

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.