Android 如何获取我的动态IP xcode
当你有一个移动连接时,你通常有两个IP地址,一个外部IP地址,可以在 IP结果:190.106.XX.XX 当我将电脑连接到BAM时,我会获得另一个IP,如中所示 IP结果:10.69.XX.XX 我需要获取的IP地址是使用它时从窗口获取的地址(10.69.XX.XX) 我检查了一个android应用程序,结果显示为RMNET0 他用java告诉我他使用了request.getRemoteHost()。来获取这些数据 任何信息我都会很感激Android 如何获取我的动态IP xcode,android,ip,ip-address,Android,Ip,Ip Address,当你有一个移动连接时,你通常有两个IP地址,一个外部IP地址,可以在 IP结果:190.106.XX.XX 当我将电脑连接到BAM时,我会获得另一个IP,如中所示 IP结果:10.69.XX.XX 我需要获取的IP地址是使用它时从窗口获取的地址(10.69.XX.XX) 我检查了一个android应用程序,结果显示为RMNET0 他用java告诉我他使用了request.getRemoteHost()。来获取这些数据 任何信息我都会很感激 提前谢谢我已经成功地尝试过了,希望对您有所帮助 +(N
提前谢谢我已经成功地尝试过了,希望对您有所帮助
+(NSString *)getIpLocally:(NSString *)networkInterface ipVersion:(int)ipVersion
{
if(ipVersion != 4 && ipVersion != 6)
{
NSLog(@"getIpLocally unknown version of IP: %i",ipVersion);
return nil;
}
NSString *networkInterfaceRef;
if ([networkInterface isEqualToString:@"ios_cellular"])
{
networkInterfaceRef = @"pdp_ip0";
}
else if([networkInterface isEqualToString:@"ios_wifi"])
{
networkInterfaceRef = @"en0"; //en1 on simulator if mac on wifi
}
else
{
NSLog(@"getIpLocally unknown interface: %@",networkInterface);
return nil;
}
NSString *address = nil;
struct ifaddrs *addrs = NULL;
struct ifaddrs *cursor = NULL;
struct sockaddr_in *s4;
struct sockaddr_in6 *s6;
char buf[64];
int success = 0;
// retrieve the current interfaces - returns 0 on success
success = getifaddrs(&addrs);
if (success == 0)
{
// Loop through linked list of interfaces
cursor = addrs;
while(cursor != NULL)
{
if((ipVersion == 4 && cursor->ifa_addr->sa_family == AF_INET) ||
(ipVersion == 6 && cursor->ifa_addr->sa_family == AF_INET6))
{
NSLog(@"Network Interface: %@",[NSString stringWithUTF8String:cursor->ifa_name]);
// Check if interface is en0 which is the wifi connection on the iPhone
if([[NSString stringWithUTF8String:cursor->ifa_name] isEqualToString:networkInterfaceRef])
{
if(ipVersion == 4)
{
s4 = (struct sockaddr_in *)cursor->ifa_addr;
if (inet_ntop(cursor->ifa_addr->sa_family, (void *)&(s4->sin_addr), buf, sizeof(buf)) == NULL)
{
NSLog(@"%s: inet_ntop failed for v4!\n",cursor->ifa_name);
}
else{
address = [NSString stringWithUTF8String:buf];
}
}
if (ipVersion == 6)
{
s6 = (struct sockaddr_in6 *)(cursor->ifa_addr);
if (inet_ntop(cursor->ifa_addr->sa_family, (void *)&(s6->sin6_addr), buf, sizeof(buf)) == NULL)
{
NSLog(@"%s: inet_ntop failed for v6!\n",cursor->ifa_name);
}
else{
address = [NSString stringWithUTF8String:buf];
}
}
}
}
cursor = cursor->ifa_next;
}
}
// Free memory
freeifaddrs(addrs);
return address;
}
要显示您可以使用的IP地址,请执行以下操作:
NSLog(@"ip v4: %@",[NSString getIpLocally:@"ios_cellular" ipVersion:4]);