0

この質問をするのは嫌いですが、スクリプト作成は非常に新しく、助けが必要です。

入力を受け入れ、受け入れ可能なIPアドレスの範囲を提供するVBSを使用して計算機を作成したいと思います。

例えば:

VBSはユーザー入力を要求しますユーザーはIPアドレス/ネットマスクを入力します:214.13.104.128/28

出力: IP Address Range = 214.13.104.129 - 214.13.104.190

使用できるオンラインツールはたくさんあることは知っていますが、インターネットにアクセスできないシステムではこれを使用する必要があります。

4

2 に答える 2

3

まだこれが必要かどうかはわかりませんが、情報科学と解決策を探している人のために、とにかくこれを投稿しています。少なくとも解決策を探している人に役立つことを願っています。OPでない場合...他の多くのStackOverflowユーザー。

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

2進数を10進数に変換する関数

'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

10進数を2進数に変換する関数

'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

2021年9月の更新 人気のあるリクエストでは、CIDRアドレスから使用可能なIP範囲を返す必要がありましたが、私にはわかりませんでした...ランダムなIP関数のリストに永遠に含まれています。

Function CIDR2IPRANGE(cidr)
    ip = cidr
    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
    lownetworkrange = Left(bytes, Mask)
    lowhostrange = Right(lows, 31 - Mask) & "1"
    rangelow = lownetworkrange + lowhostrange
    highnetworkrange = Left(bytes, Mask)
    highhostrange = Right(highs, 31 - Mask) & "0"
    rangehigh = highnetworkrange + highhostrange
    iplow = bin2ip(rangelow)
    iphigh = bin2ip(rangehigh)
    CIDR2IP = iplow & " - " & iphigh
End Function

乾杯!

于 2015-11-22T06:47:59.020 に答える
0

優れた@Steveklineの回答に加えて、IPの範囲内のすべてのIPアドレスのリストを取得したい場合は、 http://www.intelliadmin.com/index.php/2012/から取得したスクリプトを次に示します。 04 / use-vb-script-to-list-a-range-of-ip-addresses /Wayback Machineの助けを借りて)。

、、変数は1iS4ではなく0に変更する必要があると思います。iS3iS2

'*********************************
'* 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
于 2021-03-17T04:23:39.360 に答える