source: trunk/Packages/synapse/source/demo/scan/IPUtils.pas

Last change on this file was 2, checked in by chronos, 12 years ago
  • Přidáno: Základní kostra projektu.
  • Přidáno: Knihovna synapse.
File size: 2.9 KB
Line 
1unit IPUtils;
2
3interface
4
5uses SysUtils;
6
7type TIPAdresse = record
8 Oct1,
9 Oct2,
10 Oct3,
11 Oct4:Byte;
12 end;
13
14function StrToIP(const Value:String):TIPAdresse;
15function IPToStr(const Adresse:TIPAdresse):String;
16function IPToCardinal(const Adresse:TIPAdresse):Cardinal;
17function CardinalToIP(const Value:Cardinal):TIPAdresse;
18function IsIPAdress(const Value:String):Boolean;
19
20implementation
21
22// IPAdresse in Cardinal umwandeln
23function IPToCardinal(const Adresse:TIPAdresse):Cardinal;
24begin
25 Result := (Adresse.Oct1*16777216)
26 +(Adresse.Oct2*65536)
27 +(Adresse.Oct3*256)
28 +(Adresse.Oct4);
29end;
30
31// Cardinal in IP-Adresse umwandeln
32function CardinalToIP(const Value:Cardinal):TIPAdresse;
33begin
34 Result.Oct1 := Value div 16777216;
35 Result.Oct2 := Value div 65536;
36 Result.Oct3 := Value div 256;
37 Result.Oct4 := Value mod 256;
38end;
39
40// IP-Adresse in String umwandeln
41function IPToStr(const Adresse:TIPAdresse):String;
42begin
43 Result := IntToStr(Adresse.Oct1) + '.' +
44 IntToStr(Adresse.Oct2) + '.' +
45 IntToStr(Adresse.Oct3) + '.' +
46 IntToStr(Adresse.Oct4);
47end;
48
49function StrToIP(const Value:String):TIPAdresse;
50var n,x: Integer;
51 Posi:Array[1..4]of Integer;
52 Oktet:Array[1..4]of String;
53begin
54 x := 0;
55 // es dürfen nur Zahlen und Punkte vorhanden sein
56 for n := 1 to Length(Value) do
57 begin
58 // Zähle die Punkte
59 if Value[n] = '.'
60 then
61 begin
62 Inc(x);
63 Posi[x] := n;
64 end
65 else Oktet[x+1] := Oktet[x+1] + Value[n];
66 end;
67 Result.Oct1 := StrToInt(Oktet[1]);
68 Result.Oct2 := StrToInt(Oktet[2]);
69 Result.Oct3 := StrToInt(Oktet[3]);
70 Result.Oct4 := StrToInt(Oktet[4]);
71end;
72
73function IsIPAdress(const Value:String):Boolean;
74var n,x,i: Integer;
75 Posi:Array[1..4]of Integer;
76 Oktet:Array[1..4]of String;
77begin
78 Result := true;
79 x := 0;
80
81 // es dürfen nur Zahlen und Punkte vorhanden sein
82 for n := 1 to Length(Value) do
83 if not (Value[n] in ['0'..'9','.'])
84 then
85 begin
86 // ungültiges Zeichen -> keine IP-Adresse
87 Result := false;
88 break;
89 end
90 else
91 begin
92 // Zähle die Punkte
93 if Value[n] = '.'
94 then
95 begin
96 Inc(x);
97 Posi[x] := n;
98 end
99 else
100 begin
101 Oktet[x+1] := Oktet[x+1] + Value[n];
102 end;
103 end;
104
105 for i := 1 to 4 do
106 if (StrToInt(Oktet[i])>255)then Result := false;
107
108 // es müssen genau 3 Punkte vorhanden sein
109 if x <> 3
110 then
111 begin
112 // Anzahl der Punkte <> 3 -> keine IP-Adresse
113 Result := false;
114 end;
115end;
116
117end.
Note: See TracBrowser for help on using the repository browser.