我讨厌提出这个问题,但我对脚本很新,需要帮助。
我想用VBS创建一个计算器,它接受我的输入并给我一系列可接受的IP地址。
例如:
VBS要求用户输入
用户输入IP地址/网络掩码:214.13.104.128/28
输出:IP Address Range = 214.13.104.129 - 214.13.104.190
我知道您可以使用许多在线工具,但我需要在无法访问互联网的系统上使用此工具。
答案 0 :(得分:2)
不确定您是否还需要这个但是为了信息科学以及那些正在寻找解决方案的人我还是会发布这个。我希望它至少可以帮助寻找解决方案的人。如果不是OP ......许多其他Stack Overflow用户。
CIDRIP = "192.168.0.1/24" 'must be in CIDR Format as no error checking added
wscript.echo "IP Address Range " & CIDR2IP(CIDRIP, false) & " - " & CIDR2IP(CIDRIP, True)
Function CIDR2IP(ip, high)
highs = "11111111111111111111111111111111"
lows = "00000000000000000000000000000000"
byte0 = Dec2bin(Split(ip, ".")(0))
byte1 = Dec2bin(Split(ip, ".")(1))
byte2 = Dec2bin(Split(ip, ".")(2))
byte3 = Dec2bin(Split(Split(ip, ".")(3), "/")(0))
Mask = Split(Split(ip, ".")(3), "/")(1)
bytes = byte0 & byte1 & byte2 & byte3
rangelow = Left(bytes, Mask) & Right(lows, 32 - Mask)
rangehigh = Left(bytes, Mask) & Right(highs, 32 - Mask)
iplow = bin2ip(Left(bytes, Mask) & Right(lows, 32 - Mask))
iphigh = bin2ip(Left(bytes, Mask) & Right(highs, 32 - Mask))
If high Then
CIDR2IP = iphigh
Else
CIDR2IP = iplow
End If
End Function
将32位二进制字符串转换为IP地址的函数
'expecting input like 00000000000000000000000000000000
Function bin2ip(strbin)
ip0 = C2dec(Mid(strbin, 1, 8))
ip1 = C2dec(Mid(strbin, 9, 8))
ip2 = C2dec(Mid(strbin, 17, 8))
ip3 = C2dec(Mid(strbin, 25, 8))
'combines all of the bytes into a single string
bin2ip = ip0 & "." & ip1 & "." & ip2 & "." & ip3
End Function
将二进制数转换为十进制数的函数
'expecting input like 00010101
Function C2dec(strbin)
length = Len(strbin)
dec = 0
For x = 1 To length
binval = 2 ^ (length - x)
temp = Mid(strbin, x, 1)
If temp = "1" Then dec = dec + binval
Next
C2dec = dec
End Function
将十进制数转换为二进制数的函数
'Expecting input 0 thru 255
Function Dec2bin(dec)
Const maxpower = 7
Const length = 8
bin = ""
x = cLng(dec)
For m = maxpower To 0 Step -1
If x And (2 ^ m) Then
bin = bin + "1"
Else
bin = bin + "0"
End If
Next
Dec2bin = bin
End Function
添加奖金 - 对于任何了解MYSQL并在MYSQL中使用IP地址的人,他们会立即识别这些功能。
'expecting input like 10.120.44.1 and converts to 175647745
Function INET_NTOA(ip)
ip0 = Split(ip, ".")(0)
ip1 = Split(ip, ".")(1)
ip2 = Split(ip, ".")(2)
ip3 = Split(ip, ".")(3)
urlobfs = 0
urlobfs = ip0 * 256
urlobfs = urlobfs + ip1
urlobfs = urlobfs * 256
urlobfs = urlobfs + ip2
urlobfs = urlobfs * 256
urlobfs = urlobfs + ip3
INET_NTOA = urlobfs
End Function
'expecting input like 175647745 and converts to 10.120.44.1
'Bugs will occur for CLng ceiling numbers. +/- 2,147,483,647
Function INET_ATON(ip)
Dim ipa()
ReDim ipa(3)
n2ip = ip
For i = 3 To 1 Step -1
ipa(i) = n2ip Mod 256
n2ip = n2ip / 256
Next
ipa(0) = CInt(n2ip)
INET_ATON = ipa(0) & "." & ipa(1) & "." & ipa(2) & "." & ipa(3)
End Function
答案 1 :(得分:0)
作为出色的@Steve kline 答案的补充,对于那些希望获得 IP 范围内所有 IP 地址列表的人来说,这里有一个从 http://www.intelliadmin.com/index.php/2012/04/use-vb-script-to-list-a-range-of-ip-addresses/ (在 Wayback Machine 的帮助下)。
我认为 iS4
、iS3
、iS2
变量应该变成 0 而不是 1。 >
'*********************************
'* IntelliAdmin, LLC 2012 *
'* http://www.intelliadmin.com *
'*********************************
'The start and end ip range
StartIP = "10.10.29.129"
EndIP = "10.10.29.240"
'This function contains the code that will execute
'against the remote hosts
Function ExecuteAction(HostName)
'Put your code here and use the variable hostname
WScript.Echo "Hostname: " & HostName
End Function
'Parsing code below
Dim iS1,iS2,iS3,iS4
Dim iE1,iE2,iE3,iE4
Dim iC1,iC2,iC3,iC4
'Convert our starting ip to octets
IPList = Split(StartIP, ".")
iS1 = cint(IPList(0))
iS2 = cint(IPList(1))
iS3 = cint(IPList(2))
iS4 = cint(IPList(3))
'Convert our endingip to octets
IPList = Split(EndIP, ".")
iE1 = cint(IPList(0))
iE2 = cint(IPList(1))
iE3 = cint(IPList(2))
iE4 = cint(IPList(3))
'Loop through our list of IP addresses
for iC1=iS1 to 255
for iC2=iS2 to 255
for iC3=iS3 to 255
for iC4=iS4 to 255
ExecuteAction(iC1 & "." & iC2 & "." & iC3 & "." & iC4)
if ((iC1>=iE1) and (iC2>=iE2) and (iC3>=iE3) and (iC4>=iE4)) then
iC1=255
iC2=255
iC3=255
iC4=255
end if
next
iS4=1
next
iS3=1
next
iS2=1
next