#include <Array.au3>
Global $sStartIP = '1.1.1.1', $sEndIP = '1.1.8.8', $aRangeIP, $iTimer, $sTime
$iTimer = TimerInit()
$aRangeIP = _GetIPRange($sStartIP, $sEndIP)
If @error Then Exit 13
$sTime = Round(TimerDiff($iTimer), 2) & ' ms'
_ArrayDisplay($aRangeIP, $sTime)
Func _GetIPRange($s_StartIP, $s_EndIP)
Local $i_StartNum, $i_EndNum
$i_StartNum = _IP_To_Num($s_StartIP)
$i_EndNum = _IP_To_Num($s_EndIP)
If ($i_StartNum = -1) Or ($i_EndNum = -1) Then Return SetError(1)
If $i_StartNum = $i_EndNum Then
Local $a_Ret[2] = [1, $s_StartIP]
Return $a_Ret
EndIf
Local $i_Start, $i_End
If $i_StartNum > $i_EndNum Then
$i_Start = $i_EndNum
$i_End = $i_StartNum
Else
$i_Start = $i_StartNum
$i_End = $i_EndNum
EndIf
Local $a_Ret[$i_End - $i_Start + 2] = [$i_End - $i_Start + 1], $a_Num_to_IP[3] = [16777216, 65536, 256], $i_Num, $i_Tmp
For $i = 0 To $i_End - $i_Start
$i_Num = $i + $i_Start
For $j = 0 To 2
$i_Tmp = Int($i_Num / $a_Num_to_IP[$j])
$a_Ret[$i + 1] &= $i_Tmp & '.'
$i_Num -= $i_Tmp * $a_Num_to_IP[$j]
Next
$a_Ret[$i + 1] &= $i_Num
Next
Return $a_Ret
EndFunc ;==>_GetIPRange
;~ функция не используется
Func _Num_To_IP($i_Num)
Local $a_Mult[3] = [16777216, 65536, 256], $s_IP, $i_Tmp
For $i = 0 To 2
$i_Tmp = Int($i_Num / $a_Mult[$i])
$s_IP &= $i_Tmp & '.'
$i_Num -= $i_Tmp * $a_Mult[$i]
Next
$s_IP &= $i_Num
Return $s_IP
EndFunc ;==>_Num_To_IP
Func _IP_To_Num($s_IP)
Local $a_Mult[4] = [3, 16777216, 65536, 256], $i_Num, $a_IP
$a_IP = StringSplit($s_IP, '.')
If $a_IP[0] <> 4 Then Return -1
For $i = 1 To 3
$i_Num += $a_IP[$i] * $a_Mult[$i]
Next
$i_Num += $a_IP[4]
Return $i_Num
EndFunc ;==>_IP_To_Num