ios中 根据域名动态获取ip地址

本文介绍了一种通过动态获取IP地址的方法来减少网络请求时间,并探讨了使用DNSPod进行IP解析的技术实现。该方法避免了DNS查询的时间消耗,提高了网络请求效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么动态获取ip呢,

在正常的网络请求中,理论上其实访问的是ip地址,互联网中用一个ip去标识一个计算机,但是单纯的用ip访问也会引发诸如安全性或因服务器变更引发的问题,所以dns出现了,不了解dns的 可以先去了解一下dns,dns的出现解决了ip访问引发的问题,但也造成请求时间和性能上的牺牲,因为多了一个去dns系统查询特定ip的操作,拿到ip之后再去进去服务器的访问请求,

如果我们在项目中直接就可以获取到ip的话,是不是直接就省略了我们的请求到dns的时间呢,只是之前放在网络处理的部分我们放在本地完成了而已,

//根据域名 动态获取ip地址
+ (NSString*)getIPWithHostName:(const NSString*)hostName
{
const char *hostN= [hostName UTF8String];
struct hostent* phot;

@try {
phot = gethostbyname(hostN);
if (phot == nil) {
return nil;
}
}
@catch (NSException *exception) {
return nil;
}

struct in_addr ip_addr;
memcpy(&ip_addr, phot->h_addr_list[0], 4);
char ip[20] = {0};
inet_ntop(AF_INET, &ip_addr, ip, sizeof(ip));

NSString* strIPAddress = [NSString stringWithUTF8String:ip];
return strIPAddress;
}


这个方法因为引用了一些c 库中的方法,需要引入三个文件

#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>


这样就可以解决了!

注:因为从dns 获取特定ip 是网络操作,所以在断网情况下获取不到ip,大家需要酌情处理


------------2017.8.17 更新----------

因工作原因,一直没有来得及整理

上面讲的是获取ip的方式是通过底层api 从运营商处查询ip,还是会存在dns劫持可能,所以本地讲解的是第二种主流方案

基于DNSPod的ip解析,

查询方式为

http://119.29.29.29/d?dn=xxx


在我的App中目前使用的api请求框架也是基于AFNetwork+DnsPod 进行IP请求的方式,

ip处理原理:

1,通过dnspod获取到ip 存储到本地,每次应用从本地查询域名对应的 ip列表

2,每次启动app都会进行一次 域名的ip获取,更新本地ip,目的在于预防服务端变更ip的情况


小编自己的App中的请求框架现已开源:有需要的可以参考(去除了公司的Prism系统,用于包含api端的自签名系统和oAuth登录)

Github: https://github.com/xie244135119/AMDNetworkService





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值