A következő cikket „Lloy Kinsella” beleeggyezésével fordítottam le magyarra. E cikkben az IP maskingról fogok mesélni, azaz például teszem azt egy játéknál, hogyan bannoljunk egy illetőt az IP címe alapján vagy kinek adjunk jogosultságot a csatlakozáshoz stb. A cikk java része forráskód, de remélem azért érthető lesz a mellé helyezett pár leírás. Csapjunk hát a lovak közé.:
A következő kis rutinban „függvényben” találod a masking lényegét,
amit később majd meghívunk.
function IPMatchMask(IP, Mask: String): Boolean;
procedure SplitDelimitedText(Text: String; Delimiter: String; Results: TStrings);
var
TheWord, CommaText: String;
begin
Results.Clear;
CommaText := Text + Delimiter;
while (Pos(Delimiter,CommaText) > 0) do
begin
TheWord := Copy(CommaText, 1, Pos(Delimiter, CommaText)
- 1);
CommaText := Copy(CommaText, Pos(Delimiter, CommaText)
+
Length(Delimiter), Length(CommaText));
Results.Add(TheWord);
end;
end;
var
IPs, Masks: TStringList;
I: Integer;
begin
IPs := TStringList.Create;
try
Masks := TStringList.Create;
try
SplitDelimitedText(LowerCase(IP),'.',IPs);
SplitDelimitedText(LowerCase(Mask),'.',Masks);
Result := True;
if IPs.Count <> Masks.Count then
begin
Result := False;
Exit;
end;
for I := 0 to IPs.Count - 1 do
begin
if (IPs.Strings[I] <>
Masks.Strings[I]) and
(Masks.Strings[I]
<> '*') then
Result := False;
end;
finally
Masks.Free;
end;
finally
IPs.Free;
end;
end;
Minden IP cím (dns mask) négy kis számjegyből áll, mint mondjuk a 62.112.203.43 (ez egy dial upos enternet felhasználó IP címét jelzi). Mivel az enternetesek utolsó számjegye példánkban a „43” változik, ezért ha azt szeretnénk, hogy csak az enternetesek tudjanak csatlakozni a szerverre akkor egy *-t teszünk a 43 helyére. A * az mindent jelent, mindent visz mint a magyar kártyában az ász. ;) (Azaz bármilyen max 3 jegyű számjegy kerülhet a helyére)
112
203
*
Persze leírhatod simán az aktuális IP címet is ha dialról van szó ha nem, de
mivel most ez csak egy példa ezért ígyhadjuk... Ez volt a nagy rutin lényege,
de nézzük hogyan tudjuk hasnosítani.
Használhatod például a TServerSocket komponens OnClientConnect eseményét, azaz
amikor csatalkozik a felhasználó a célgéphez. Íme.:
procedure ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinsocket);
begin
if not (IPMatchMask(Socket.LocalAddress,'62.112.215.*')) then Socket.Close;
end;
Ennek hatására minden felhasználót aki nem rendelkezik Enternetes eléréssel,
azaz ezzel az IP címmel az nem tud csatlakozni a célgéphez.
Nos igen e cikkem viszonylag rövidnek bizonyult, de annál lényegretörőbnek.
Nagyon sokmindenre tudod használni a későbbiekben és én úgyvélem, nem csak a
Delphi Socket Komponenseit használva vele.