2012-11-05 80 views
0

我不想问这个问题,但对于脚本编程还是很新的,需要帮助。来自IP地址/网络掩码使用VBScript的IP范围电缆因子

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

例如:

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

输出:IP Address Range = 214.13.104.129 - 214.13.104.190

我知道有你可以用很多在线工具,但我将需要在无法访问互联网的系统上使用它。

任何人的例子或帮助将是伟大的。

谢谢。

+0

为什么不下载便携式应用程序? – CustomX

+0

好吧,下载并转移到其他电脑是不允许的。这将需要我可以重新键入其他系统上的代码。谢谢 – NuckinFutz

+0

所以我发现这一点,它看起来像我需要的,但它在C#中,我需要它是一个.vbs。任何人都可以帮助我在.vbs中重做它吗? http://stackoverflow.com/questions/1470792/how-to-calculate-the-ip-range-when-the-ip-address-and-the-netmask-is-given?rq=1 谢谢您 – NuckinFutz

回答

1

不知道你是否仍然需要这个,但为了Informational Science和那些正在寻找解决方案的人,我发布了这个。我希望它至少可以帮助寻找解决方案的人。如果不是OP ...许多其他堆栈溢出用户。

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