Récupérer l'index d'une adresse IP locale [Résolu]

Philippe734 309 Messages postés lundi 16 décembre 2002Date d'inscription 15 juin 2015 Dernière intervention - 8 juin 2010 à 07:03 - Dernière réponse : Philippe734 309 Messages postés lundi 16 décembre 2002Date d'inscription 15 juin 2015 Dernière intervention
- 11 juin 2010 à 00:45
Bonjour,
Après avoir cherché, je n'ai pas trouvé comment récupérer l'index d'une adresse ip locale mais sans lister une table de routage ou autre table d'ip. Ma question est donc simple, comment déterminer cela sans faire de listing. Je suis ouvert à toutes les possibilité y compris wmi et wsh. Merci d'avance.
Afficher la suite 

Votre réponse

10 réponses

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 10 juin 2010 à 10:37
+3
Utile
Le lien que je te propose dans ma première réponse fournit les infos récupérables à partir de l'API GetIfTable.
Dans ces infos, les adresses IP n'apparaissent pas. Par contre, on y voit les adresses MAC.
Donc, ce que je te propose, c'est de récupérer l'adresse MAC associée à l'adresse IP que tu recherches au travers du code que je t'ai collé.
Une fois que tu as l'adresse MAC, il devient facile de parcourir les résultats de la première application pour retrouver ton index d'interface.

Comme le dit Mayzz, de quel type est ton adresse IP : Locale sur le réseau interne ou parles-tu d'adresse IP public sur le Net ?
Si c'est cette dernière, l'adresse MAC que tu récupèreras (peut-être) sera la MAC du routeur/gateway exposé au réseau internet, pas celle du PC.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Jack
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 9 juin 2010 à 00:57
+1
Utile
Désolé je m'inisse dans la conversation.

Donc si je résume on en reviens au point de départ :

J'ai une machine avec 5 adresses :

127.0.0.1
0.0.0.0
192.168.0.199
192.168.1.15
192.168.2.1

Si je cherche l'index de l'IP 192.168.0.199 ce sera le N° 2, par contre si je recherce l'index de l'IP 80.81.192.75, l'index sera n'existe pas.
Donc même en te relisant soit tu t'es mal exprimé, soit la solution t'as été donné mais tu a mal compris.


Pour faire la recherche de l'index à partir de l'IP, il te suffit de stocker les infos dans un tableau et de faire une boucle.


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Commenter la réponse de Mayzz
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 8 juin 2010 à 10:45
0
Utile
Salut
Faudrait déjà qu'on comprenne ce que tu appelles "l'index d'une adresse ip locale" !

Rappelle toi qu'on ne sait pas sur quoi tu travailles ni ton environnement.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 8 juin 2010 à 11:14
Commenter la réponse de cs_Jack
Philippe734 309 Messages postés lundi 16 décembre 2002Date d'inscription 15 juin 2015 Dernière intervention - 8 juin 2010 à 19:58
0
Utile
Par index d'une adresse ip locale, je veux parler de l'index de l'interface. On peut récupérer la table d'index avec l'api getiftablepar exemple. Mais je n'arrive à trouver du code pour faire l'inverse, c'est à dire récupérer l'index à partir d'une adresse ip. Je peux tester chaque adresse de getiftable mais s'il s'agit d'une adresse locale non listée par cette fonction alors pas d'index récupéré.
Commenter la réponse de Philippe734
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 8 juin 2010 à 20:46
0
Utile
Bon, j'ai personnellement tapé "VB6 GetIfTable" dans Bing et j'ai aisément trouvé <cet exemple> qui semble fonctionner
Pour faire la recherche de l'index à partir de l'IP, il te suffit de stocker les infos dans un tableau et de faire une boucle.
Parmi les données reccueillies, il ne semble pas y avoir l'adresse IP mais seulement l'adresse MAC.
Tu peux utiliser ce genre de code pour récupérer l'adresse MAC en fonction de l'IP :
Déclaration :
Private Const NO_ERROR                      As Long = &H0
Private Const ERROR_BAD_NET_NAME            As Long = &H43
Private Const ERROR_BUFFER_OVERFLOW         As Long = &H6F
Private Const ERROR_GEN_FAILURE             As Long = &H1F
Private Const ERROR_INVALID_PARAMETER       As Long = &H57
Private Const ERROR_INVALID_USER_BUFFER     As Long = &H6F8
Private Const ERROR_NOT_FOUND               As Long = &H490
Private Const ERROR_NOT_SUPPORTED           As Long = &H32

Private Declare Function ConvertIPtoLong Lib "wsock32.dll" Alias "inet_addr" (ByVal s As String) As Long
Private Declare Function SendARP Lib "iphlpapi.dll" (ByVal DestIP As Long, ByVal SrcIP As Long, pMacAddr As Long, PhyAddrLen As Long) As Long
Private Declare Sub ConvertByteArrayToLong Lib "kernel32" Alias "RtlMoveMemory" (dst As Byte, src As Long, ByVal bcount As Long)

Code :
Public Function GetRemoteMACAddress(ByRef RemoteIP As String, _
                                    ByRef ReturnedMacAddress As String, _
                                    ByRef SeparationChar As String) As Boolean

    Dim dwRemoteIP  As Long
    Dim pMacAddr    As Long
    Dim bpMacAddr() As Byte
    Dim PhyAddrLen  As Long
    Dim lResponse   As Long
    
    GetRemoteMACAddress = False  ' par défaut
    dwRemoteIP = ConvertIPtoLong(RemoteIP)
    If dwRemoteIP <> 0 Then
        PhyAddrLen = 6
        'Retrouver le Mac pour L'adresse IP ...
        lResponse = SendARP(dwRemoteIP, 0&, pMacAddr, PhyAddrLen)
        Select Case lResponse
            Case NO_ERROR
                If (pMacAddr <> 0) And (PhyAddrLen <> 0) Then
                    ReDim bpMacAddr(0 To PhyAddrLen - 1)
                    ConvertByteArrayToLong bpMacAddr(0), pMacAddr, ByVal PhyAddrLen
                    ReturnedMacAddress = FormatMacAddress(bpMacAddr(), SeparationChar)
                    If Len(ReturnedMacAddress) > 0 Then
                        If Left$(ReturnedMacAddress, 1) <> "(" Then
                            GetRemoteMACAddress = True
                        End If
                    Else
                        ReturnedMacAddress = "Récupération adresse MAC impossible (Ipv6 ?)"
                    End If
                End If
            Case ERROR_BAD_NET_NAME
                ReturnedMacAddress = "(GetRemoteMACAddress) Réseau inaccessible."
            Case ERROR_BUFFER_OVERFLOW
                ReturnedMacAddress = "(GetRemoteMACAddress) Adresse MAC attendue trop longue."
            Case ERROR_GEN_FAILURE
                ReturnedMacAddress = "(GetRemoteMACAddress) Adresse réseau cible ou réseau inaccessible."
            Case ERROR_INVALID_PARAMETER
                ReturnedMacAddress = "(GetRemoteMACAddress) Paramètre invalide."
            Case ERROR_INVALID_USER_BUFFER
                ReturnedMacAddress = "(GetRemoteMACAddress) Buffer invalide."
            Case ERROR_NOT_FOUND
                ReturnedMacAddress = "(GetRemoteMACAddress) Elément non trouvé."
            Case ERROR_NOT_SUPPORTED
                ReturnedMacAddress = "(GetRemoteMACAddress) Fonction non supportée par le système."
            Case Else
                ReturnedMacAddress = "(GetRemoteMACAddress) Erreur non prise en charge : &H" & Hex(lResponse) & "."
        End Select
    End If
      
End Function

Private Function FormatMacAddress(btAddress() As Byte, sDelim As String) As String

    Dim r       As Long
    Dim sTemp   As String
    
    On Local Error GoTo Erreur
    
    ' Jusqu'à présent, les adresses MAC font 6 segments, de 0 à 5
    If UBound(btAddress) = 5 Then
        ' Agrège les segments avec le séparateur fourni
        For r = 0 To 4
            sTemp = sTemp & Right$("00" & Hex(btAddress(r)), 2) & sDelim
        Next
        sTemp = sTemp & Right$("00" & Hex(btAddress(5)), 2)
    End If
    ' Résultat
    FormatMacAddress = sTemp
    
Fin:
    Exit Function
    
Erreur:
    FormatMacAddress = "(FormatMacAddress) Erreur " & Err.Number & " - " & Err.Description
    Resume Fin
End Function
Commenter la réponse de cs_Jack
Philippe734 309 Messages postés lundi 16 décembre 2002Date d'inscription 15 juin 2015 Dernière intervention - 8 juin 2010 à 20:50
0
Utile
Merci, mais l'index n'est pas l'adresse mac. Faire une boucle pour récup l'index je sais déjà faire mais si l'adresse ip dont je souhaite l'index n'est pas listée alors l'index ne sera pas récupéré.
Commenter la réponse de Philippe734
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 9 juin 2010 à 00:09
0
Utile
Ah bah oui, si tu n'as pas l'IP ...
Alors pourquoi dire ceci dans ton précédent message : "c'est à dire récupérer l'index à partir d'une adresse ip"
Bref, on ne peut trouver que des choses qui existent ...
Je ne pense pas qu'une adresse IP puisse exister sans support/interface.

Ta question n'est pas claire, on ne sais pas où tu veux en venir.
Que cherches-tu ?
A partir de quoi ?

Si tu cherches le nom de l'interface à partir de l'adresse IP, tu as là tous les éléments :
- traduire IP en MAC
- retrouver la MAC address parmi les fiches énumérées par GetIfTable
Commenter la réponse de cs_Jack
Philippe734 309 Messages postés lundi 16 décembre 2002Date d'inscription 15 juin 2015 Dernière intervention - 9 juin 2010 à 00:26
0
Utile
Aie, je vais finir par d'agacer. Car tu as mal compris. Dans message d'origine "comment récupérer l'index d'une adresse ip locale" j'ai omis de préciser que j'avais l'adresse ip parce que ca me paraissait évident. Ma question est :
A partir d'une adresse ip locale, comment récupérer son index. Sachant que l'index en anglais est "index interface" et que ce n'est pas l'adresse mac. En tous cas merci de ton aide.
Commenter la réponse de Philippe734
Philippe734 309 Messages postés lundi 16 décembre 2002Date d'inscription 15 juin 2015 Dernière intervention - 11 juin 2010 à 00:45
0
Utile
Merci pour votre aide. J'ai suivis vos conseils afin de créer une fonction pour le faire simplement. Puis, j'en fait une source :
http://www.vbfrance.com/codes/RECUPERER-INDEX-ADRESSE-IP-LOCALE-PARTIR-ADRESSE-IP_51888.aspx
Commenter la réponse de Philippe734

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.