Page 1 sur 1

Toutes les adresses IP d'un poste local...

Publié : ven. 27/avr./2012 14:17
par GallyHC
Bonjour tous,

J'aivais besoin pour un logiciel de connaitre les divers adresses IP local d'un ordinateur. Alors j'ai cherche sur VFrance et trouvais un code que j'ai converti en PureBasic. Je vous le partage ou cas ou cela sert un jour a quelqu'un :).

En fait cela donne les divers adresse IP du poste, genre (12.0.0.1, 192.168.x.x, ect...)

Code : Tout sélectionner

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Structure DBYTE
  unused1.b
  unused2.b
EndStructure

Structure MIB_IPADDRROW
  dwAddr.l
  dwIndex.l
  dwMask.l
  dwBCastAddr.l
  dwReasmSize.l
  unused1.DBYTE
  unused2.DBYTE
EndStructure

Structure MIB_IPADDRTABLE
  dwNumEntries.l
  table.MIB_IPADDRROW[400]
EndStructure

; ****************************************************************************
; ****************************************************************************
; ****************************************************************************
; ****************************************************************************

; +--------------------------------------------------------------------------+
; |                                                                          |
; +--------------------------------------------------------------------------+

Define i.l
Define result.l
Define number.l
Define ltemps.l = 400
Define IPADDRTABLE.MIB_IPADDRTABLE
Define openlibrary.l = OpenLibrary(#PB_Any, "iphlpapi.dll")

If openlibrary <> 0 And IsLibrary(openlibrary)
  result = CallFunction(openlibrary, "GetNumberOfInterfaces", @number)    
  If result = 0
    For i=0 To number
      result = CallFunction(openlibrary, "GetIpAddrTable", @IPADDRTABLE, @ltemps, #True)
      If IPADDRTABLE\table[i]\dwAddr <> 0
        MessageRequester("", IPString(IPADDRTABLE\table[i]\dwAddr))
      EndIf
    Next i
  EndIf
  CloseLibrary(openlibrary)
EndIf
Cordialement,
GallyHC

PS: En gros c'est comme faire un "ipconfig /all".

Re: Toutes les adresses IP d'un poste local...

Publié : ven. 27/avr./2012 16:22
par Cls
Bonjour,

n'est ce pas le but de la fonction ExamineIPAddresses() ?

Re: Toutes les adresses IP d'un poste local...

Publié : ven. 27/avr./2012 16:36
par Atlante
Cls a écrit :Bonjour,

n'est ce pas le but de la fonction ExamineIPAddresses() ?
Il me semble bien que oui ;)

Re: Toutes les adresses IP d'un poste local...

Publié : ven. 27/avr./2012 16:40
par GallyHC
Oui cela doit servir a cela visiblement, Le seul truc c'est que je connaissais pas du tout :) et c'est visiblement mal documente (voir le forum anglais).

Cordialement,
GallyHC

Bon j'ai fait un test et je reste avec ma fonction le test est le suivant et il ne trouve qu'une seule IP.

Code : Tout sélectionner

  InitNetwork()
  Define lresult.l

  If ExamineIPAddresses() = #True
    While lresult = 0 
      lresult = NextIPAddress()
      Debug IPString(lresult)
    Wend
  EndIf
Donc vraiment pas probant cette fonction...

Cordialement,
GallyHC

Re: Toutes les adresses IP d'un poste local...

Publié : ven. 27/avr./2012 18:05
par nico
Ben, le résultat est normal vu ton code, tu ne peux pas avoir plus d'une adresse ip!

Le code devrait ressembler a ça:

Code : Tout sélectionner

  InitNetwork()
  Define lresult.l

  If ExamineIPAddresses() = #True
    Repeat
      lresult = NextIPAddress()
        If lresult <> 0
           Debug IPString(lresult)
        endif
    until lresult = 0
  EndIf

Re: Toutes les adresses IP d'un poste local...

Publié : ven. 27/avr./2012 20:18
par GallyHC
nico> Ouep erreur de la part mais dans tout les cas cela n'indique pas "127.0.0.1", mais bon deja j'en ai pas besoin :).

GallyHC