Newsgroup: it.comp.lang.visual-basic
Titolo: Recuperare ip dinamico

Spero non sia un OT ma, non sono molto pratico di VB...esiste un modo per
recuperare l'ip assegnato dal provider per internet?

recuperare l'ip assegnato dal provider per internet?
Questo moduletto, che ho scrissi riutilizzando materiale trovato in
rete, stampa sulla finestra immediata gli indirizzi IP della macchina.
Da qui puoi partire per adattarlo alle tue necessita'.
<codice>
Option Explicit
Private Const MAX_ADAPTER_NAME_LENGTH         As Long = 256
Private Const MAX_ADAPTER_DESCRIPTION_LENGTH  As Long = 128
Private Const MAX_ADAPTER_ADDRESS_LENGTH      As Long = 8
Private Const ERROR_SUCCESS  As Long = 0
Private Type IP_ADDRESS_STRING
    IpAddr(0 To 15)  As Byte
End Type
Private Type IP_MASK_STRING
    IpMask(0 To 15)  As Byte
End Type
Private Type IP_ADDR_STRING
    dwNext     As Long
    IpAddress  As IP_ADDRESS_STRING
    IpMask     As IP_MASK_STRING
    dwContext  As Long
End Type
Private Type IP_ADAPTER_INFO
  dwNext                As Long
  ComboIndex            As Long  'reserved
  sAdapterName(0 To (MAX_ADAPTER_NAME_LENGTH + 3))        As Byte
  sDescription(0 To (MAX_ADAPTER_DESCRIPTION_LENGTH + 3)) As Byte
  dwAddressLength       As Long
  sIPAddress(0 To (MAX_ADAPTER_ADDRESS_LENGTH - 1))       As Byte
  dwIndex               As Long
  uType                 As Long
  uDhcpEnabled          As Long
  CurrentIpAddress      As Long
  IpAddressList         As IP_ADDR_STRING
  GatewayList           As IP_ADDR_STRING
  DhcpServer            As IP_ADDR_STRING
  bHaveWins             As Long
  PrimaryWinsServer     As IP_ADDR_STRING
  SecondaryWinsServer   As IP_ADDR_STRING
  LeaseObtained         As Long
  LeaseExpires          As Long
End Type
Private Declare Function GetAdaptersInfo Lib "iphlpapi.dll" ( _
                                        pAdapterInfo As Any, _
                                        pOutBufLen As Long _
                                        ) As Long
 
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (
_
                                        Destination As Any, _
                                        Source As Any, _
                                        Length As Long)
' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Public Function vbGetLocalIps(Optional ByVal a_AdapterSep As String =
vbNewLine, _
                            Optional ByVal a_AddressSep As String =
vbTab _
                            ) As String
 
   Dim pOutBufLen       As Long
   Dim bufAdapters()    As Byte
   Dim bufAddresses()   As Byte
   Dim adapter_info     As IP_ADAPTER_INFO
   Dim addr_string      As IP_ADDR_STRING
   Dim ptrAdapter       As Long
   Dim ptrAddress       As Long
   Dim retAddresses     As String
 
   Call GetAdaptersInfo(ByVal 0&, pOutBufLen)
   If (pOutBufLen > 0) Then
 
      ReDim bufAdapters(0 To pOutBufLen - 1) As Byte
 
      If GetAdaptersInfo(bufAdapters(0), pOutBufLen) = ERROR_SUCCESS
Then
 
         ptrAdapter = VarPtr(bufAdapters(0))
         While (ptrAdapter)
 
            CopyMemory adapter_info, ByVal ptrAdapter, ByVal
LenB(adapter_info)
 
            ptrAddress = VarPtr(adapter_info.IpAddressList)
            While (ptrAddress)
                CopyMemory addr_string, ByVal ptrAddress, ByVal
LenB(addr_string)
                retAddresses = retAddresses & _
                        TrimEx(StrConv(addr_string.IpAddress.IpAddr,
vbUnicode)) & _
                        a_AddressSep
                ptrAddress = addr_string.dwNext
            Wend
 
            ptrAdapter = adapter_info.dwNext
            retAddresses = retAddresses & a_AdapterSep
 
         Wend  '// ptrAdapter
      End If  '// GetAdaptersInfo
   End If  '// pOutBufLen
   If Len(retAddresses) > 0 Then
      retAddresses = Left$(retAddresses, Len(retAddresses) - _
                            Len(a_AdapterSep) - Len(a_AddressSep))
   End If
   vbGetLocalIps = retAddresses
End Function    '// vbGetLocalIps
Private Function TrimEx(ByRef src As String) As String
    Dim pos As Integer
    pos = InStr(1, src, vbNullChar, vbBinaryCompare)
    If pos Then
          TrimEx = Trim$(Left$(src, pos - 1))
    Else
        TrimEx = Trim$(src)
    End If
End Function    '// TrimEx
</codice>
-- 
hth, hal

wow!grazie...ci mettero un bel pò per capirci qualcosa,spero di farcela...ma
stampa nella finestra immediata che si usa per il debug??ma di solito non si
digita "?"e poi una variabile? qui quale sarebbe/sarebbero?

digita "?"e poi una variabile? qui quale sarebbe/sarebbero?
Eh eh, non hai tutti i torti: prima di mandarla, per essere sicuro che
funzionasse, l'ho eseguita nella finestra di debug, poi mi sono
incartato nello scrivere il messaggio ;-)
?vbGetLocalIps
192.168.30.13 
62.11.91.36 
0.0.0.0 
0.0.0.0
-- 
hth, hal

Scusa se ti sto un pò addosso, ho chiamato in form_load la function
vbGetLocalIPS in modo da vedere che faceva in debug (spero che il non capire
sia dovuto ai presunti 23 anni di differenza),ma a me riporta solamente l'ip
della rete che penso corrisponda al 192.168.30.13 che hai scritto nel
post...ma gli altri da dove sbucano fuori (premettendo che in immediate non
mi vuole dare nessuno risultato...)
P.S.: grazie comunque...

Sfogliando tra i vecchi post con google(come facio a scaricarli tutti sul pc
e salvarli?) ho trovato che esiste una dichiarazione API che dovrebbe fare
al caso mio "GetIpAdrTable",ma con win2000 attraverso il visualizzatore non
la trovo..possibile?o può chiamarsi in un altro modo?

o può chiamarsi in un altro modo?
E' proprio lei:
The GetIpAddrTable function retrieves the interface–to–IP address
mapping table.
DWORD GetIpAddrTable(
  PMIB_IPADDRTABLE pIpAddrTable,  // buffer for mapping table 
  PULONG pdwSize,                 // size of buffer 
  BOOL bOrder                     // sort the table 
);
E' un po' piu' difficilotta da usare da vb ed e' supportata solo da
win98 in poi.
Trovi un esempio qui:
http://www.mvps.org/vbnet/index.html?code/network/getipaddresstable.htm
-- 
hth, hal

 The GetIpAddrTable function retrieves the interface-to-IP address


difficilmente puo' accorgersi :)))
Il mio glottologo preferito ha colpito ancora :-)
-- 
ciao, hal (o hall ?)

ragazzi intanto che ci siete,ho letto che posso usare winsock,collegarmi a
un sito come google e chiedere il remotehostip se cerco l'ip di un pc in
internet dietro router(che mi interessa)...è fattibile?
Scusate se insisto ma stò cercando di capirci qualcosa(visto che ho anche
certi problemini con inglese e non ho mai usato un API)

 ciao, hal (o hall ?)
quando ti senti molto accogliente, va benone la seconda.
anche se un vero genovese risparmia e va in terza :)

 wrote in message
news:PvFU9.33968$AA2.1...@news2.tin.it...

Se è dietro router, è dura usare "un sito come google"... Però puoi provare
questo, è carino. 
http://www.zoneedit.com/lookup.html
Usare winsock per interrogare la pagina, beh è fattibile ma un pò ostico se
sei nuovo all'uso dei socket.
Con un controllo Internet in pratica navighi sulla pagina, usi il DOM per
riempire le textbox, usi il DOM per eseguire la richiesta e usi il DOM per
leggere il risultato. E' un pelo più semplice.
Altrimenti usa XMLHTTPServer dell'Ms-XmlDom, ma devi costruirti a mano la
richiesta.
De gustibus.
ciao,
Dads.

Scusa,ma il DOM sarebbe??
(spero di non prendere troppi insulti :-)))) )


Document Object Model.
Per capirci quello che usi in JavaScript o VBScript dentro la pagina HTML.
In pratica la pagina HTML prende la forma di un oggeto, o, meglio, viene
rappresentata come oggetto.
Puoi usarlo anche direttamente nel controllo Internet.
Su MSDN ci sono un sacco di esempi.
Ciao,
D.