Objective-C : Wie Holen Sie die router-Adresse?
Habe ich versucht zu Holen, die router-Adresse auf diese Weise.
- (NSString *) routerIp {
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
//retrieve the current interfaces - returns 0 on success
success = getifaddrs(&interfaces);
if (success == 0)
{
//Loop through linked list of interfaces
temp_addr = interfaces;
while(temp_addr != NULL)
{
if(temp_addr->ifa_addr->sa_family == AF_INET)
{
//Check if interface is en0 which is the wifi connection on the iPhone
if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"])
{
//Get NSString from C String //ifa_addr
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_dstaddr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
//Free memory
freeifaddrs(interfaces);
return address;
}
Die router-Adresse sieht immer aus wie xxx.xxx.255.255 aber es soll Aussehen wie xxx.xxx.0.1 oder etwas in dieser Art...
Ist es, alles zu tun, um die gültige Adresse?
Vielen Dank für Ihre Hilfe!
- ifa->ifa_dstaddr ist die broadcast-Adresse, die erklärt, die "255 ist".
- check-out dieser link könnte hilfreich sein, um Sie stackoverflow.com/questions/6530322/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe auf der Suche nach einem Weg, um die IP-Adresse des Standard-Gateways selbst. Ich konzentriere mich dabei nur auf dieses - ich habe nicht brauchen, um die MAC-Adresse des default router, so dass diese nur teilweise Antworten, die die OP ' s Frage.
Ich nicht wie die Idee der Analyse der netstat-Ausgabe. Auch können Sie nicht bekommen eine Standard-route, basierend auf der IP-Adresse einer Schnittstelle auf Ihrem Computer hat. Jede IP-Adresse im gleichen Bereich wie deiner, ist eine Standard-gateway - die einzige Regel ist, dass sowohl Ihre IP-Adresse und den Standard-gateway müssen sich im gleichen Subnetz.
Eine weitere Sache, die ich wollte, um sicherzustellen, ist die IP-Adresse des Standard-Gateways ein, selbst wenn mehr als einer meiner lokalen Schnittstelle hat eine IP-Adresse zugewiesen werden (z.B. ich bin mit dem WLAN und dem kabelgebundenen Ethernet zur gleichen Zeit, und beide Schnittstellen sind, mit einer IP-Adresse auf Sie). Für meine Anwendung ist es egal, welche Schnittstelle die default-route wird über (es kann sein, en0, en1, ppp0 oder irgendetwas anderes überhaupt).
Ich denke die beste (und die meisten Apple-ähnliche) Weise zu erhalten, die info ist, verwenden Sie den System Configuration Framework - die links in dem Beitrag oben in diesem thread wies mich in diese Richtung, aber nicht wirklich geben viel detail, wie es zu benutzen, und ich finde nicht das Apple-Dokumentation sehr hilfreich (zumindest unter Berücksichtigung meines skill-level).
Bitte beachtet ich bin nicht sehr erfahren in Objective-C - ich bin in der Mitte des Schreibens einer app, die ich brauche, mich (und die ich nicht finden konnte), und für diese app muss ich nur die IP-Adresse des Standard-Gateways.
Also - hier ist, was ich Tue in meiner app, und es scheint zu funktionieren gut (plus ist viel kürzer und einfacher als die meisten anderen Lösungen die ich bisher gefunden:
Bitte beachten Sie, dass in meiner app, die ist ein Teil einer größeren Methode (eigentlich habe ich nicht wirklich einen defaultRouter: Methode drin). Außerdem habe ich weggelassen, einige der Prüfungen (wie [routerString Länge] und so weiter) für die Kürze.
Ich hoffe, jemand findet das nützlich. Bitte auch fühlen sich frei, um etwaige Fehler zu beheben, hätte ich vielleicht in dem code oben - ich bin immer noch ein Neuling!!!
PS. Ich habe eine Idee, was zu suchen, wenn ich überprüft die Ausgabe von 'scutil', welche mit der System-Configuration-Framework selbst:
SCDynamicStoreCreate
undSCDynamicStoreCopyValue
sind nicht auf iOS verfügbar. Dies funktioniert nur für einen Mac.nm -m /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration | grep SCDynamicStoreCreate
Hier ist etwas code, den ich schrieb zu finden, die Routen für die Maschine. Kopiert habe ich die system-Aufrufe aus dem code für
netstat
. Beachten Sie, dass ich mich stark abgeraten, dies zu tun, da diese Systemaufrufe sind nicht eine unterstützte API und können sich jederzeit ändern. Sie empfohlen, dass ich nur zum Parsen der Ausgabe vonnetstat
.CustomRoute.c:
CustomRoute.h:
xxx.xxx.255.255 ist die Subnetz-Maske. Sie müssen die gateway-Adresse.
Siehe Tabelle 3-10, gibt es einen Eintrag für den router in diesem pdf:
http://developer.apple.com/Mac/library/documentation/Networking/Conceptual/SystemConfigFrameworks/SystemConfigFrameworks.pdf
Die HTML-version ist hier: http://developer.apple.com/Mac/library/documentation/Networking/Conceptual/SystemConfigFrameworks/SC_Overview/SC_Overview.html