WMI: необычный сканер TCP-портов — HackZona.Ru

Приветствую, читатель. Сегодня мы напишем простой однопоточный сканер TCP-портов в 50 строк. Главная его особенность состоит в том, что для его создания нам понадобится только блокнот и операционная система*. В штатную поставку каждой Windows NT входит скриптовый хост WSH (Windows Script Host) с интерпретаторами VBScript и JScript. Доступ ко множеству вкусностей ОС нам предоставит основанная на COM централизованная подсистема WMI. В ней есть недокументированный MSDN'ом класс для сетевой диагностики «NetDiagnostics», с ним-то и сварим кашу. [code]'***************************************************************************************** '* Name: PortScaner '* Language: VBScript '* CommandLine: PortScaner.vbs [[host[=localhost]] portStart[=7] portEnd] '* Description: Сканер открытых TCP-портов и диапазонов портов. '************************************************************************************ '* CopyLeft: kiber_punk, 19 spt 2011 '**********************************

WMI: необычный сканер TCP-портов

Сообщений в теме: 0
Нравится
Не нравится
Репутация: 0
Рейтинг: 0
Кол-во тем: 0
Сообщения: 0
Приветствую, читатель.

Сегодня мы напишем простой однопоточный сканер TCP-портов в 50 строк.
Главная его особенность состоит в том, что для его создания нам понадобится только блокнот и операционная система*.
В штатную поставку каждой Windows NT входит скриптовый хост WSH (Windows Script Host) с интерпретаторами VBScript и JScript.

Доступ ко множеству вкусностей ОС нам предоставит основанная на COM централизованная подсистема WMI.
В ней есть недокументированный MSDN'ом класс для сетевой диагностики «NetDiagnostics», с ним-то и сварим кашу.

[code]'*****************************************************************************************
'* Name: PortScaner
'* Language: VBScript
'* CommandLine: PortScaner.vbs [[host[=localhost]] portStart[=7] portEnd]
'* Description: Сканер открытых TCP-портов и диапазонов портов.
'************************************************************************************
'* CopyLeft: kiber_punk, 19 spt 2011
'*************************************************************************************
SELECT CASE wsh.arguments.count
CASE 0: MSGBOX «USAGE:» & VBCR & «cscript.exe PortScaner.vbs [host] port» & VBCR &_
«cscript.exe PortScaner.vbs [host] portStart portEnd»,,«Port-scaner»
WSH.Quit
CASE 1:
host=«localhost»
port=WSH.ARGUMENTS(0)
CASE 2:
host=WSH.ARGUMENTS(0)
port=WSH.ARGUMENTS(1)
CASE 3:
PoprtRange = (WSH.ARGUMENTS(2) — WSH.ARGUMENTS(1))
REDIM port(PoprtRange)
host = WSH.ARGUMENTS(0)
j=0
FOR i = WSH.ARGUMENTS(1) TO WSH.ARGUMENTS(2)
port(j)=i
j=j+1
NEXT
END SELECT

set wmi = GetObject («winmgmts:NetDiagnostics»).instances_
'----прозвон единственного порта----
if NOT IsArray(port) THEN
FOR EACH net IN wmi
res = net.ConnectToPort ( host ,port)
if (res) THEN wscript.echo (host &": "& port)
next
else
'----проверка диапазона----
FOR EACH net IN wmi
for each p in port
res = net.ConnectToPort (host ,p)

IF (res) THEN
wscript.echo (host & ": " & p & " GOOD")
ELSE
wscript.echo (host &": "& p)
END IF
next
NEXT
end if
[/code]

Можно сканить как диапазон, так единственный порт.
Код скрипта предельно ясен и в случае чего легко допиливается под нужды пользователя.
Запускать его лучше через консольный интерпретатор, по понятным причинам.
Вывод можно перенаправить во внешний файл, например:
[quote]
cscript PortScaner.vbs ya.ru 75 200 > c:\ipports.txt
cscript PortScaner.vbs 127.0.0.1 135
[/quote]

* после XP/2k3 класс исчез из внутреннего CIM-репозитория Windows.
Скорее всего, его заменили более совершенным, но поковыряться в более молодых ОС у меня нет возможности.
Для того, чтобы отвечать в темах на форуме необходимо войти на сайт или зарегистрироваться.