Вопрос по сетевым утилитам (решено)

c00xer

Под Windows XP/2003 нужна утилита командной строки, по функционалу близкая к ping. Известно, что ping возвращает код ошибки в переменную errorlevel - 0 если успешно "пинганулось" и 1 если по какой-либо причине ответ не пришёл. Мне нужно:
1) чтобы вместо ICMP происходило соединение на определённый порт (как это делает команда netsh diag connect iphost «host» «port» )
2) чтобы результат выводился не только на экран, а ещё и в переменную errorlevel (упомянутый netsh так не умеет, он тупо возвращает 0).
3) чтобы утилита была стабильной и безглючной и не вешала мне сервак на вторые сутки посреди ночи 😛
Советы вроде "переходи на фряху" не катят. Накрайняк в delphi накатаю что-нибудь своё.

raven6

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
3) чтобы утилита была стабильной и безглючной и не вешала мне сервак на вторые сутки посреди ночи
А вот за это не скажу, много nmap'ом не пользовался.

raven6

Возможно более простой и удобный вариант - PortQry от Microsoft.
Значения errorlevel на выходе:
returns 0 if port is listening
returns 1 if port is not listening
returns 2 if port is listening or filtered

c00xer

Что-то 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.
)
)

c00xer

За portqry спасибо.

raven6

c00xer
Что-то IMHO слишком корявое решение - 2 внешние программы, создание временного файла.
Ну количество внешних программ удалось сократить до одной - поправил свой пост: find вместо grep. Но, согласен с Вами, городить такой огород не стоит.

c00xer

Ай-ай-ай, какая гадость:


Поддержка DNS
Программа PortQry отправляет правильно составленный DNS-запрос на порт ТСР или UDP на следующее полное имя домена (FQDN):
portqry.microsoft.com
Защищаются от сканирования портов?

raven6

c00xer
Защищаются от сканирования портов?
А что это даст в плане защиты?

c00xer

Типа, улики... Скрипткидди ловить. Что называется, в лучших традициях 😞

Himoza

Может старенький netcat поможет? http://himoza.org/files/nc.rar может работать и как клиент и как сервер.

c00xer

Да я уже сделал, см. сообщение #3. Спасибо. Кстати, netcat некоторыми антивирусами определяется как нежелательное ПО.

Himoza

c00xer
Кстати, netcat некоторыми антивирусами определяется как нежелательное ПО.
Ну так на основе его сколько back-connect'ов в свое время пионерами было напридумано. С хитрыми батниками 😊

c00xer

BTW, по поводу надёжности - работает пока, тьфу-тьфу-тьфу. Роутер не вешает, всё идеально.