【发布时间】:2013-03-28 22:51:58
【问题描述】:
我喜欢在我的应用程序中显示 IP 地址,我已经知道如何显示 WiFi IP 地址,但是当我在 callular 时它会显示错误,那么有没有一种方法可以在 iPhone 上显示蜂窝 IP 地址?
这是我用于 WiFi IP 地址的代码:
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
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
NSLog(address);
【问题讨论】:
-
您收到什么错误信息?也许蜂窝网络的接口名称不是“en0”?您的代码仅适用于 IPv4 地址。有关枚举所有本地 IPv4 和 IPv6 接口地址的代码,请参阅(例如)stackoverflow.com/a/14084031/1187415,这可能会有所帮助。
-
@Martin R 我没有收到任何错误,IP 地址的字符串只是(错误)
-
蜂窝网络的接口可能有不同的名称(不是“en0”)。尝试枚举所有接口,也许你可以识别出蜂窝网络的接口。还可以尝试 IPv6(请参阅我之前评论中的链接)。
标签: ios objective-c ip-address