2

Ich habe einigen bestehenden Code, der fein unter Windows 2003 gearbeitet, um die Liste der IP-Adressen zu erhalten, an den Server gebunden: AdresseWie bekomme ich eine Liste von System-IP-Adressen in Windows 2008 und .NET, die "Skipassource" -Adressen enthalten?

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

Wenn ich diesen Code auf unserer Windows 2008 Server ausgeführt werden, es liefert nur eine IP . Bei weiterer Untersuchung scheint es, dass der Rest der IP-Adressen, die der Computer überwacht, mit dem Befehl netsh int ipv4 add address hinzugefügt wurde und das Flag skipassource=true angegeben wurde.

Gibt es eine Möglichkeit, diese Adressen in meine Abfrage aufzunehmen, d. H. ALLE Adressen auf dem Server zurückzugeben? Wenn Sie neugierig sind, wurde das Flag skipassource=true gesetzt, weil Windows 2008 ein neues Verhalten im Netzwerk eingeführt hat, das es erlaubt zu entscheiden, welche Ihrer IP-Adressen es als "primär" ansieht, und der Rest unserer Anwendungen verlässt sich auf uns der Lage, die primäre. der einzige Weg, das zu tun, in Windows 2008 zu wählen ist, alle anderen Adressen als skipassource=true.)

bearbeiten Diese Frage ist jetzt meine Neugier nur zu befriedigen, ist zu markieren, wie ich das Problem gearbeitet haben. Mein ursprünglicher Code oben wurde verwendet, um alle IPs auf dem Server zu durchlaufen und zu sehen, ob es eine Übereinstimmung mit einer bestimmten IP fand, die ich suchte. Ich überprüfe jetzt, ob der Server, auf dem ich bin, bereits einen Dienst ausführt, der auf diese spezifische IP-Adresse/Port hört, so dass ich nicht mehr ALLE IPs durchlaufen muss. Dennoch wäre ich interessiert zu hören, ob es eine Antwort auf die ursprüngliche Frage gibt.

Bearbeiten Dank @aKzenT für die Lösung auf diesem. Ich verwende jetzt NetworkInteface.GetAllNetworkInterfaces(), um Zugang zu allen IPs zu erhalten, anstatt Dns.GetHostEntry(). Mein letzter Code sieht wie folgt aus:

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

würden Sie wissen, wie Skipassource = true hinzuzufügen, wenn eine Adresse mit .NET hinzuzufügen? Momentan wird ManagementObject verwendet, um eine neue Adresse hinzuzufügen – user815809

+0

Entschuldigung, ich bin nicht vertraut mit dem, wie man das macht. Würde wohl eine gute Frage zu SO stellen. –

+1

gefragt hier http://stackoverflow.com/questions/12973074/how-to-programmatics-set-skipassource-true-using-c-net – user815809

Antwort

2

skipassource beabsichtigt ist, keine IP-Adresse im DNS-Name-System enthalten, so dass ich glaube, Sie einen anderen Weg finden müssen als Dns.GetHostEntry

Haben Sie versucht, auf der Suche System.Net.NetworkInformation-Namespace?

Ich denke, wenn Sie die Adapter über GetAllNetworkInterfaces durchlaufen dann rufen Sie GetIPProperties, um die IP-Eigenschaften des Adapters zu erhalten, und überprüfen Sie dann UnicastAddresses können Sie eine Liste von IP-Adressen erstellen. Nicht getestet.

Siehe auch: http://msdn.microsoft.com/de-de/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx

+0

Vielen Dank, das funktioniert! Ich aktualisiere meine Frage mit meinem endgültigen Code. –

+0

@aKzenT, ​​wüsstest du, wie man skipassource = true hinzufügt, wenn man eine Adresse mit .NET hinzufügt? Derzeit verwenden Sie ManagementObject, um eine neue Adresse hinzuzufügen. – user815809

+0

@ user815809 Tut mir leid, keine Ahnung, wie das geht. Ich schlage vor, eine separate Frage dafür zu öffnen, wenn Google Ihnen kein Ergebnis gibt ... – aKzenT