Bonjour,
Est-ce que qulqu'un aurait une fonction pour savoir si une adresse IP est incluse dans un réseau.
Ex: Savoir si 10.0.1.65 est inclue dans 10.0.1.32 mask 255.255.255.248
Merci.
Bonjour,
Est-ce que qulqu'un aurait une fonction pour savoir si une adresse IP est incluse dans un réseau.
Ex: Savoir si 10.0.1.65 est inclue dans 10.0.1.32 mask 255.255.255.248
Merci.
Voici ce que j'utilise:
L'idée est de masquer les 2 adresses IP avec le masque réseau...
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 //============================================================================== //=== Test si une adresse IP est dans le même reseau //=== USES: Winsock Function IPSameNetwork(IpLocal: String; IpMask: String; IpToTest: String): boolean; Var ul_IpLocal: u_long; ul_IpToTest: u_long; ul_NetMask: u_long; Begin result := False; //== convertie l'adresse IP en integer == ul_IpLocal := ntohl(inet_addr(PChar(IpLocal))); ul_IpToTest := ntohl(inet_addr(PChar(IpToTest))); ul_NetMask := ntohl(inet_addr(PChar(IpMask))); If (ul_IPLocal And ul_NetMask) = (ul_IpToTest And ul_NetMask) Then result := TRUE; End;
(d'où le nom "subnet mask")
alors si on obtien le même résultat... on est dans le même réseau!
J'ignore si il existe quelque de mieux?
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 //=== Exemple d'appèle == Procedure TfrmMain.Button2Click(Sender: TObject); Begin If IPSameNetwork('10.0.1.33', '255.255.255.248', '10.0.1.65') Then Begin // les adresses IP sont dans le même Réseau Button2.Caption := 'Same Network!' End Else Begin // Les adresses IP NE sont PAS dans le même réseau! Button2.Caption := 'Different Network!' End; End;
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
Citation Slam666:Le masque de sous-réseaux n'est il pas plutôt 255.255.255.0 ?Savoir si 10.0.1.65 est inclue dans 10.0.1.32 mask 255.255.255.248
un masque 255.255.255.248 est valide...
il représente un sous réseau avec 6 adresse IP valide.
On voit particulièrement souvent ce genre de mask
pour des adresse IP fix sur internet attribué à une petite entreprise...
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
Oui Eric mais dans ce cas ton test (IPSameNetwork('10.0.1.33', '255.255.255.248', '10.0.1.65') va planter, non?
Particulierement cette ligne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part If (ul_IPLocal And ul_NetMask)=(ul_IpToTest And ul_NetMask) Then result := TRUE;
Effectivement...avec ce masque, 10.0.1.65 n'est pas dans le même réseauxEnvoyé par Fabrice ROUXEL 1
que 10.0.1.33
seule les adresses suivantes appartiennent au même reseau que 10.0.1.33
10.0.1.34
10.0.1.35
10.0.1.36
10.0.1.37
10.0.1.38
Alors la réponse est non, et la fonction retourne False. Alors tout va bien?Envoyé par slam666
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
on peut ajouter 10.0.1.39
J'ai plutôt l'impression qu'il attendait TRUE, c'est pourquoi j'insiste sur la définition du masque.
humm... pour le broadcast seulement...mais effectivement tu as raison.Envoyé par Fabrice ROUXEL 1
La fonction retourne aussi TRUE pour 10.0.1.32... qui n'est
pourtant pas une adresse valide avec le masque....
Faut s'avoir ce qu'on fait finalement...
je devrais peut-être modifier la fonction?
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager