使用VBScript从IP地址/网络掩码中获取IP范围计算器

时间:2012-11-05 13:09:33

标签: vbscript ip netmask

我讨厌提出这个问题,但我对脚本很新,需要帮助。

我想用VBS创建一个计算器,它接受我的输入并给我一系列可接受的IP地址。

例如:

VBS要求用户输入 用户输入IP地址/网络掩码:214.13.104.128/28

输出:IP Address Range = 214.13.104.129 - 214.13.104.190

我知道您可以使用许多在线工具,但我需要在无法访问互联网的系统上使用此工具。

2 个答案:

答案 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 的帮助下)。

我认为 iS4iS3iS2 变量应该变成 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