Wie zu Lesen, die Windows-Standard-Gateway-IP-Adresse in C++
Können einige Körper zeigen mir, wie zu Lesen, die Standard-windows-gateway-IP-Adresse in C++. Ich bin in der Lage, Lesen Sie die Liste aller IP-Adressen mit GetAdaptersInfo (), aber nicht die Standard-gateway-IP-Adresse.
GetAdaptersInfo( pAdapterInfo, &BufferLength );
//Iterate the network adapters and print their MAC address.
while( pAdapterInfo )
{
pAdapterInfo = pAdapterInfo->Next; //Get next adapter info
}
Hier ist das code-snippet und Frage mich, welches Feld gibt mir das Standard-gateway. Ich kann das gateway von jeder IP-Adresse in der Liste, aber ich brauche die Standard-gateway-IP-Adresse.
Der ursprüngliche Grund für den Wunsch war dies zu wählen, die bestimmten MAC-Adresse (aus der Reihe von MAC-Adressen) die IP, die hat der Standard-gateway. Wie bekommen wir mehrere MAC-Adressen, die während der Iteration durch die Liste, wir dachten, der beste Weg ist, Holen Sie die MAC-Adresse des IP ist das default gateway. Wir haben da unser Bewusstsein verändert, und wählen Sie die WLAN-Verbindung die MAC-Adresse. Aber ich bin immer noch neugierig zu wissen, wie man die Standard-gateway statt des Durchlaufs durch alle Adapter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
GetAdaptersInfo
gibt Ihnen diese:Vielleicht müssen Sie veröffentlichen Sie Ihren code, wenn Sie nicht in der Lage sind, um die gateway von
GetAdaptersInfo
Daten, die Sie bereits mit.Grundsätzlich können Sie "preview" diese Informationen durch ausführen
ipconfig /all
von commend prompt. Sie werden sehen, gateways definiert sind pro Schnittstelle, es gibt keine Globale gateway.route print
bekommt Sie Routen, und Sie können sehen, Sie werden priorisiert und danach bestimmt, ob dies oder das-gateway effektiv genutzt wird: es hängt davon ab, welche route genommen wird.Da Sie verwenden möchten, WINAPI, GetAdapterAddresses kann nur die beste option.
In der Dokumentation für die IP_ADAPTER_ADDRESSES Funktion ist hier.
Es funktioniert einfach nicht auf diesem Weg - die Einstellungen-Fenster zeigt das Standard-gateway für die Schnittstelle gegeben, aber es gibt keine solche Sache als Standard-gateway für das gesamte system. Wieder Einstellungen-Fenster wird versuchen, hilfreich zu sein und schlage vor, seting eine oder andere Netzwerk-Schnittstelle als Standard, aber was wirklich passiert, wenn Sie tun, ist ading ein Standard-Eintrag in einer routing-Tabelle. Die Sache ist, dass fortgeschrittene setups wird Ihnen ermöglichen, beispielsweise verschiedene Schnittstellen (oder auch gateways), abhängig von der Ziel-Adresse. Wenn Sie möchten, dass Ihre Standard-gateway für Zwecke der comunicating einige spezifische Adresse, die Sie verwenden können, GetBestRoute - es wird Ihnen sagen, Sie das gateway ein, die Sie verwendet haben würde, wenn Sie wollte Kontakt angegebene Adresse. Wenn Sie wollen bekommen Sie nur eine generische Standard-gateway für Ihren computer können Sie versuchen zu Scannen, die durch routing-Tabelle, aber es ist eine böse Sache zu tun, und es vielleicht nicht einmal etwas ausgemacht, als einzigen Standard-gateway gibt, könnten viele von Ihnen - das system wird in der Regel "nur Arbeit" sowieso, aber es könnte schwierig werden, um Ihr Programm zu finden, dass aus.
Zu sumarize: es gibt keine solche Sache, die ein computer-wide default-gateway. Windows-Desktop sind in der Regel set-up in einer Weise, die ähnelt, aber das ist keine strikte Anforderung. Selbst wenn es so ist, ist es getan mit niedrigeren level-Mechanismus (routing-Tabelle), und Lesen Sie die Konfiguration kann man böse - ich weiß, ich habe es getan 😉
Andere Idee - das control panel wahrscheinlich hält diese Einstellungen irgendwo in der registry, die für das system in der Lage sein, das Netzwerk zu konfigurieren, die auf jedem system starten. Wenn Sie feststellen, ot wo diejenigen sind, die Sie vielleicht nicht die 100% netorking-orientierten Standard-gateway, aber Sie wird sicherlich erhalten den Wert der Benutzer sieht in der Einstellungen-Fenster. Ich weiß nicht, wo zu suchen wissen und ich vermute, dass es nicht veröffentlicht, und hat als detail - mening, dass es von version zu version, und auch mit einigen größeren updates/Service Packs. Wenn Sie diesen Weg gehen, wird es wahrscheinlich nicht portabel zwischen verschiedenen windows-Versionen.
PS: Warum benötigen Sie dies? Warum würde jemand brauchen diese?
Normalerweise würden Sie verwenden GetAdaptersInfo (wie in der römisch-R ' s Antwort) oder vorzugsweise GetAdapterAddresses (als pro specializt Antwort), um eine Liste der Adapter, und genau ein adapter wäre genau ein gateway konfiguriert. Es ist jedoch möglich, mehr als eine default-gateway, obwohl es nicht zu empfehlen. Jedoch auf einem computer, die mehrere Standard-gateways, glaube ich, dass die GetBestRoute - Funktion wird Ihnen sagen, welche ist die zurzeit im Einsatz. Beachten Sie, dass diese sich jederzeit ändern können.
Nur wenn mehrere Adapter gateways konfiguriert würde Sie anrufen müssen GetBestRoute zu entscheiden, welche von den Standard-gateways ist wahrscheinlich für jede gegebene Verbindung. Bedenken Sie, dass, wenn es mehr als einen Standard-gateway, keiner von Ihnen wird als inhärent "besser" als die anderen; in anderen Worten, in diesem Szenario, es gibt keine solche Sache als "Standard-gateway", es gibt nur die "Standard-gateways".
GetAdaptersInfo
gibt Sie. Was sehen Sie?