Get Public IP in Objective-C?(在目标C中获取公有IP?)
本文介绍了在目标C中获取公有IP?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的应用程序中,我需要获得一个等于用户公共/互联网IP地址的NSString对象值。我尝试过解决这个问题的方法,但都返回了本地IP地址而不是公共IP地址。下面是我的两种方法。其中一个更精确,并且始终返回数组中的正确项。另一个则不是。(因为我们只选择了一个随机索引)...- (NSString *)getPublicIP {
NSHost *publicIP = [[[NSHost currentHost] addresses] objectAtIndex:0];
return publicIP;
}
其他更精确:(但不获取公网IP)
//start get ip
- (NSString *)getIPWithNSHost {
NSArray *addresses = [[NSHost currentHost] addresses];
NSString *stringAddress;
for (NSString *anAddress in addresses) {
if (![anAddress hasPrefix:@"127"] && [[anAddress componentsSeparatedByString:@"."] count] == 4) {
stringAddress = anAddress;
break;
}
else {
stringAddress = @"IPv4 address not available" ;
}
//NSLog(stringAddress);
}
NSLog (@"getIPWithNSHost: stringAddress = %@ ",stringAddress);
stringAddress = (@"getIPWithNSHost: stringAddress = %@ ",stringAddress);
return stringAddress;
}
无论哪种方式,我只需要一种方法来获取外部/公共/互联网IP地址。(只是为了澄清一下,外部/公共/互联网IP是可以从Whatsmyip.org检索的IP)
推荐答案
以下是一个iOS友好版本的josh十亿答案:
+(void)getPublicIP:(void(^)(NSString *))block {
NSURL *url = [NSURL URLWithString:@"http://checkip.dyndns.org"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[[NSURLSession sharedSession]dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
// consider handling error
} else {
NSString *html = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
NSString *ipAddr = [[html componentsSeparatedByCharactersInSet:numbers.invertedSet]componentsJoinedByString:@""];
if (block) {
block(ipAddr);
}
}
}]resume];
}
这篇关于在目标C中获取公有IP?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:在目标C中获取公有IP?
基础教程推荐
猜你喜欢
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01