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

Résolu
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 - 8 juin 2010 à 07:03
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 - 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.

10 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
10 juin 2010 à 10:37
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.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
9 juin 2010 à 00:57
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.
1
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juin 2010 à 10:45
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juin 2010 à 11:14
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
8 juin 2010 à 19:58
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é.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
8 juin 2010 à 20:46
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
0
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
8 juin 2010 à 20:50
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é.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
9 juin 2010 à 00:09
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
0
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
9 juin 2010 à 00:26
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.
0
Philippe734 Messages postés 308 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 15 juin 2015 1
11 juin 2010 à 00:45
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
0
Rejoignez-nous