Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

VB.Net - Interfacce di rete e indirizzi

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

VB.Net - Interfacce di rete e indirizzi

Postdi maxmula » 18/03/12 22:41

Ciao a tutti,
Dovrei scrivere un programma in grado di leggere i nomi di tutte le interfacce di rete presenti sul sistema ed i rispettivi indirizzi IP (più o meno come avviene con il comando "ipconfig"; Tutte le informazioni estrapolate andranno poi presentate all'utente all'interno di un controllo Listview.

FInora, le istruzioni "utili" che sono riuscito a reperire sono:

Codice: Seleziona tutto
        strHostName = System.Net.Dns.GetHostName()

        NetList = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces

        IPAddressList = System.Net.Dns.GetHostAddresses(strHostName)



La struttura NetList è contiene i nomi e le descrizioni di tutte le interfacce di rete (ma non gli indirizzi), mentre IPAddressList contiene un sacco d'informazioni sulgli IP Address delle interfacce attualmente in stato "Up" ma nessuna informazione circa le schede.

Un modo che ho escogitato per correlare le due informazioni è cercare in NetList tutte le interfacce che risultano abilitate (OperationalState = "Up") ed andare a leggere in IPAddressList la corrispondente posizione (la prima interfaccia opertiva è infatti in posizione 0, la seconda in posizione 1, ecc.)

Il problema è che il tutto funziona solo se ogni interfaccia di rete ha un solo indirizzo assegnato: se invece è impostata con più di un indirizzo IP statico, in IPAddressList questi compaiono tutti quanti, per cui il ragionamento sopra esposto non funziona più...

Qualcuno saprebbe indicarmi se esiste un modo in VB2010 (.net Framework 3.5) per rilevare gli IP address corrispondenti a ciascuna interfaccia di rete?

Ciao e grazie!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Sponsor
 

Re: VB.Net - Interfacce di rete e indirizzi

Postdi maxmula » 19/03/12 15:38

Risolto. Mi auto-rispondo: non è bello lasciare le domande aperte! :)

Cercando in rete, è uscita questa pagina:
http://social.msdn.microsoft.com/Forums/en/ncl/thread/ba5c5b7c-0880-4dfd-9792-06313fb58c3f

Il programma presentato lì è in C# ma si può facilmente adattare per funzionare anche in VB2010 (basta convertire un paio d'istruzioni nella sintassi corretta).

Il codice risultante (qui in versione già "semi-evoluta" rispetto all'originale) è qualcosa del genere:

Codice: Seleziona tutto
      ' Generazione di un elenco delle interfacce di rete con i rispettivi IP Address
      ' (scrivibile su file csv)
     
      Dim NetIF
      Dim IPList As String
      Dim IFName as String
      Dim IFDescr As String
      Dim IFStatus As String
      Dim IFType As String

      IPList = ""
      NetList = System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces
      For Each NetIF In NetList
            IFName = netif.name
            IFDescr = netif.description
            IFStatus = netif.operationalstatus.ToString
            IFType = netif.networkinterfacetype.ToString

            IPList = IPList & IFName & "," & IFDescr & "," & IFStatus

            IFproperties = netif.GetIPProperties()
            AddrCount = 0
            AddrList = "-"
            For Each IPAddressInformation In IFproperties.UnicastAddresses
                If AddrCount = 0 Then
                    AddrList = IPAddressInformation.Address.ToString
                Else
                    AddrList = AddrList & "|" & IPAddressInformation.Address.ToString
                End If
                AddrCount += 1
            Next
            IPList = IPList & "," & AddrList & vbCrLf
        Next
       
        Debug.Print (IPList)


In questo modo ottengo una stringa, orgnizzata come una lista, in cui ogni riga contiene:
    - Nome dell'interfaccia di rete;
    - Descrizione della Network Interface Card
    - Stato della connessione (Up/Down)
    - Lista di IP Address assegnati, separati da carattere "|" (se la connessione è "Down" e/o non sono assegnati indirizzi, il campo conterrà un trattino ("-")

A questo puntio la lista può essere usata per fare ciò che si desidera. 8)

Grazie lo stesso!
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34


Torna a Programmazione


Topic correlati a "VB.Net - Interfacce di rete e indirizzi":


Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti