Mon objectif (D7) : être sûr que le poste est connecté sur le même réseau que le poste hébergeant la Base de Données ! L'adresse de ce dernier étant (bien entendu) connue .

Voilà comment je m'en sors , cependant il me reste 2 questions ainsi qu'une remarque
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
30
31
32
33
34
35
36
 
unit IPUnit;
 
interface
uses  IdStack;
 
function isDBinLAN(DBIP : String): Boolean;
function GetIp : String;
 
implementation
 
function isDBinLAN(DBIP : String): boolean;
var LDBIp,LmyIP,Mask : LongInt;
    myIP : String;
begin
 with TIdStack.CreateStack do
  begin
   myIP:=LocalAddress;
   TranslateStringToTInAddr(ResolveHost('255.255.255.0'),mask);
   TranslateStringToTInAddr(ResolveHost(DBIP),LDBip);
   TranslateStringToTInAddr(myIP,LmyIP);
   Result:=((LDBIP AND mask)=(LmyIP AND Mask)) OR (ResolveHost(DBIP)=ResolveHost('localhost'));
   Free;
  end;
end;
 
function GetIP : String;
begin
  with TIdStack.CreateStack do
  begin
    Result := LocalAddress;
    Free;
  end;
end;
 
end.
Questions :
-la variable Mask , masque de sous-réseau j'ai bien sur utilisé le plus 'classique' mais est-ce une bonne idée ? je ne suis pas une pointure en IP est-ce que cela fonctionnerai si j'ai 2 sous-réseau ? il doit y avoir un moyen plus élégant que d'utiliser une constante '255.255.255.0' via formule mathématique que j'entrevoie , mais je sèche un peu .

-C'est bien beau pour IPv4 mais que se passe t'il si IPv6 ?

Remarque :
Pour faire cette unité , j'ai pas mal cogité , lu les FAQs etc... ce qui m'amène à la FAQ Comment connaître son adresse IP ? le code pour les Delphi<D6 n'est pas faux mais renvoi uniquement la dernière adresse réseau (donc pas forcément celle recherchée)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
  i := 0; 
  while pptr^[i]<>nil do 
  begin 
    result := StrPas(inet_ntoa(pptr^[i]^)); 
    Inc(i); 
  end;
l'adresse IP d'un poste étant généralement la première
Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result := StrPas(inet_ntoa(pptr^[0]^));
aurait peut être été plus juste ? ou me trompe_je (tel l'éléphant) ?