c # - Sådan får du en liste over systemets IP-adresser i Windows 2008 og. NET, der omfatter 'hoppe over' adresser?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har nogle eksisterende kode, der fungerede fint under Windows 2003, for at få listen over IP-adresser bundet til serveren:


foreach (IPAddress addr in (Dns.GetHostEntry(Dns.GetHostName())).AddressList)
{
    // Code here to act on each address
}


Når jeg kører denne kode på vores Windows 2008-server, returnerer den kun en IP-adresse. Efter yderligere undersøgelser ser det ud til, at resten af ​​de IP-adresser, som maskinen lytter på, blev tilføjet ved hjælp af kommandoen netsh int ipv4 add address og angiver flaget skipassource=true.


Er der en måde at inkludere disse adresser i min forespørgsel, dvs. returnere ALLE adresser på serveren?


(Hvis du er nysgerrig, blev flag skipassource=true indstillet, fordi Windows 2008 introducerede ny opførsel i netværk, der gør det muligt at bestemme, hvilken af ​​dine IP-adresser den anser for 'primær', og resten af ​​vores applikationer stole på, at vi er Kunne vælge den primære. Den eneste måde at gøre det i Windows 2008 er at markere alle andre adresser som skipassource=true.)


Rediger Dette spørgsmål er nu bare for at tilfredsstille min nysgerrighed, da jeg har arbejdet rundt om problemet. Min oprindelige kode ovenfor blev brugt til at løbe gennem alle IP'erne på serveren, og se om den fandt en match til en bestemt IP, jeg ledte efter. Jeg kontrollerer nu for at se, om serveren jeg allerede kører en tjeneste, der lytter til den pågældende IP-adresse/-port, så jeg ikke længere behøver at løbe gennem alle IP'erne. Jeg ville stadig være interesseret i at høre om der er et svar på det oprindelige spørgsmål.


Rediger Tak til @aKzenT for løsningen på dette. Jeg bruger nu NetworkInteface.GetAllNetworkInterfaces() for at få adgang til alle IP'erne, snarere end Dns.GetHostEntry(). Min sidste kode ser sådan ud:


foreach (NetworkInterface netface in NetworkInterface.GetAllNetworkInterfaces())
{
    foreach (UnicastIPAddressInformation uni in netface.GetIPProperties().UnicastAddresses)
    {
        IPAddress addr = uni.Address;
        // Code here to act on each address
    }
}

Bedste reference


skipassource er beregnet til ikke at indeholde en ip-adresse i DNS-navnesystemet, så jeg synes, du skal finde en anden måde end Dns.GetHostEntry


Prøvede du at kigge på navnet Space.Net.NetworkInformation?


Jeg tror, ​​at hvis du løber gennem adapterne via GetAllNetworkInterfaces, skal du ringe GetIPProperties for at få adapterens IP-egenskaber og derefter kontrollere UnicastAddresses, du kan opbygge en liste over IP-adresser. Ikke testet dog.


Se også:
http://msdn.microsoft.com/de-de/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx[14]