Hallo allemaal,
Ik probeer al dagen het volgende voor elkaar te krijgen:
Ik wil een programma maken waaarbij ik een startIP en een eindIP ingeef. Vervolgens dient dit programma alle tusseliggende IP's in een lijst weer te geven.
bv
StartIP: 10.0.0.1
EindIP: 10.0.0.254
Lijst:
10.0.0.1
10.0.0.2
10.0.0.3
..........
enz
Ik moet dus eigenlijk een teller hebben voor IP-adressen. Het leek me daarom zinvol om het start en eindIP eerst te converteren naar een LongInt. Hiervoor heb ik de volgende code inmiddels geschreven:
Echter de waardes die deze functie terug geeft lijken op het eerste gezicht nergen op te slaan. Ik begreep het pas toen ik deze converteerde naar HEX:
10.0.0.1 --> 16777226 --> 10000A
10.0.0.2 --> 33554442 ---> 20000A
10.0.0.3 ---> 50331658 ---> 30000A
Ik heb op google gezocht maar kan niks vinden over hoe ik zou moeten tellen met waardes zoals hierboven.
Is er iemand die weet hoe ik hoe ik op basis van de bovenstaande waardes een lijst maak van IP's binnen een bepaalde range? Of heeft iemand een betere manier om dit te doen ?
Ik probeer al dagen het volgende voor elkaar te krijgen:
Ik wil een programma maken waaarbij ik een startIP en een eindIP ingeef. Vervolgens dient dit programma alle tusseliggende IP's in een lijst weer te geven.
bv
StartIP: 10.0.0.1
EindIP: 10.0.0.254
Lijst:
10.0.0.1
10.0.0.2
10.0.0.3
..........
enz
Ik moet dus eigenlijk een teller hebben voor IP-adressen. Het leek me daarom zinvol om het start en eindIP eerst te converteren naar een LongInt. Hiervoor heb ik de volgende code inmiddels geschreven:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| function IpToLong(ip: string): Longint;
var
x, i: Byte;
ipx: array[0..3] of Byte;
v: Integer;
begin
Result := 0;
Longint(ipx) := 0;
i := 0;
for x := 1 to Length(ip) do
if ip[x] = '.' then
begin
Inc(i);
if i = 4 then Exit;
end
else
begin
if not (ip[x] in ['0'..'9']) then Exit;
v := ipx[i] * 10 + Ord(ip[x]) - Ord('0');
if v > 255 then Exit;
ipx[i] := v;
end;
Result := Longint(ipx);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Caption := IntToStr (IPToLong(Edit1.Text));
end; |
Echter de waardes die deze functie terug geeft lijken op het eerste gezicht nergen op te slaan. Ik begreep het pas toen ik deze converteerde naar HEX:
10.0.0.1 --> 16777226 --> 10000A
10.0.0.2 --> 33554442 ---> 20000A
10.0.0.3 ---> 50331658 ---> 30000A
Ik heb op google gezocht maar kan niks vinden over hoe ik zou moeten tellen met waardes zoals hierboven.
Is er iemand die weet hoe ik hoe ik op basis van de bovenstaande waardes een lijst maak van IP's binnen een bepaalde range? Of heeft iemand een betere manier om dit te doen ?