1 (изменено: Alexey, 2012-09-21 14:23:45)

Тема: VbScript:Определение принадлежности IP адреса к подсети с маской

function count_subnet_prefix(subnet) 'первый пришедший в голову алгоритм подсчета префикса подсети
	parts=split(subnet,".")
	prefix=1
	subnet_dec=parts(0)*256^3+parts(1)*256^2+parts(2)*256+parts(3)	
	do
		bin_part=cint(right(cstr(subnet_dec),1)) mod 2
		if bin_part=1 then prefix=prefix+1
		subnet_dec=(subnet_dec-bin_part)/2
	loop while (subnet_dec>2)
	count_subnet_prefix=prefix
end function

function is_ip_in_network_masked(ip,network,mask)
	parts=Split(IP,".")
	dec_ip=parts(0)*256^3+parts(1)*256^2+parts(2)*256+parts(3)	
	parts=Split(network,".")
	network_start=parts(0)*256^3+parts(1)*256^2+parts(2)*256+parts(3)
	network_end=network_start+2^(32-count_subnet_prefix(mask))
	if (dec_ip>=network_start)and(dec_ip<=network_end) then 
		is_ip_in_network_masked = true
	else
		is_ip_in_network_masked = false
	end if
end function	
	
msgbox is_ip_in_network_masked("192.168.4.1","192.168.0.0","255.255.252.0")

Пользуемся функцией is_ip_in_network_masked(ipадрес, начало подсети, маска) - возвращаем булево - принадлежит ip указанной подсети с указанной маской или нет

2

Re: VbScript:Определение принадлежности IP адреса к подсети с маской

Как комментарий. Зная IP и маску подсети, для любого произвольное адреса X легко вычислить принадлежность его данной подсети по "формула":

netIP <= X && X <= bcastIP

где
X - произвольный адрес
netIP - адрес подсети
bcastIP - адрес бродкаста

( 2 * b ) || ! ( 2 * b )