2012-11-05 76 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