Под Windows XP/2003 нужна утилита командной строки, по функционалу близкая к ping. Известно, что ping возвращает код ошибки в переменную errorlevel - 0 если успешно "пинганулось" и 1 если по какой-либо причине ответ не пришёл. Мне нужно:
1) чтобы вместо ICMP происходило соединение на определённый порт (как это делает команда netsh diag connect iphost «host» «port» )
2) чтобы результат выводился не только на экран, а ещё и в переменную errorlevel (упомянутый netsh так не умеет, он тупо возвращает 0).
3) чтобы утилита была стабильной и безглючной и не вешала мне сервак на вторые сутки посреди ночи 😛
Советы вроде "переходи на фряху" не катят. Накрайняк в delphi накатаю что-нибудь своё.
nmap такое умеет.
Пример использования
Батник
@echo off
nmap -dd -oG result.txt «тут пишем IP или URL хоста» -p «тут пишем нужный порт»
find "open" result.txt > nul
goto %errorlevel%
:1
echo ACHTUNG!!!!!! Remote host(s) are not available
goto end
:0
echo Remote host(s) are available
:end
@echo on
После использования этого батника 0 в errorlevel - если порт открыт, и 1 - если порт закрыт или хост недоступен.
Найдено здесь. Батник чуть переделан, чтобы избежать использования grep.
c00xerА вот за это не скажу, много nmap'ом не пользовался.
3) чтобы утилита была стабильной и безглючной и не вешала мне сервак на вторые сутки посреди ночи
Возможно более простой и удобный вариант - PortQry от Microsoft.
Значения errorlevel на выходе:
returns 0 if port is listening
returns 1 if port is not listening
returns 2 if port is listening or filtered
Что-то IMHO слишком корявое решение - 2 внешние программы, создание временного файла. Строго говоря, "так" nmap не умеет, поскольку всё равно пришлось ковыряться в выводе, переназначив его в файл. Если уж ковыряться в выводе, то так:
code:
for /f "tokens=8 skip=4" %%s in ('netsh diag connect iphost «address» «port»') do (
if "%%s"=="[NONE]" (
echo Your server is dead
) else (
echo Still alive.
)
)
За portqry спасибо.
c00xerНу количество внешних программ удалось сократить до одной - поправил свой пост: find вместо grep. Но, согласен с Вами, городить такой огород не стоит.
Что-то IMHO слишком корявое решение - 2 внешние программы, создание временного файла.
Ай-ай-ай, какая гадость:
Защищаются от сканирования портов?
Поддержка DNS
Программа PortQry отправляет правильно составленный DNS-запрос на порт ТСР или UDP на следующее полное имя домена (FQDN):
portqry.microsoft.com
c00xerА что это даст в плане защиты?
Защищаются от сканирования портов?
Типа, улики... Скрипткидди ловить. Что называется, в лучших традициях 😞
Может старенький netcat поможет? http://himoza.org/files/nc.rar может работать и как клиент и как сервер.
Да я уже сделал, см. сообщение #3. Спасибо. Кстати, netcat некоторыми антивирусами определяется как нежелательное ПО.
c00xerНу так на основе его сколько back-connect'ов в свое время пионерами было напридумано. С хитрыми батниками 😊
Кстати, netcat некоторыми антивирусами определяется как нежелательное ПО.
BTW, по поводу надёжности - работает пока, тьфу-тьфу-тьфу. Роутер не вешает, всё идеально.