iOS APP 发网络请求时,如何指定域名强制解析某 IP,不使用域名服务器的 IP

2017-07-06 10:57:42 +08:00
 q409195961

由于 DNS 污染,某环境下,xxx.com 的域名被解析成 123.0.0.1

如何在发请求时,把 xxx.com 的域名强制解析 IP 成 127.0.0.1 去请求数据

在 PC 下,可以通过修改 /etc/hosts 实现

127.0.0.1 xxx.com

请问在移动端的 APP 该如何处理??

网络请求框架:AFNetworking

3553 次点击
所在节点    C
19 条回复
wujichao
2017-07-06 11:23:35 +08:00
urlprotocol
liuminghao233
2017-07-06 11:29:52 +08:00
做这事情没啥意义啊

dns 请求也是发 udp 包给服务器,然后你解 reply 包,把 ip 地址拿出来。

你都知道 ip 了还解析个啥,有点莫名其妙的感觉。
honeycomb
2017-07-06 11:32:52 +08:00
使用各大厂商提供的 HTTP dns 接口。
当然也可以自己做,但可能没意义。
q409195961
2017-07-06 11:42:13 +08:00
@liuminghao233 我不是想拿到 ip 地址。我是想在发请求 xxx.com 的接口时,域名指向的 ip 地址是 127.0.0.1,而不是 DNS 服务器给的 123.0.0.1。(不可以直接通过 IP 地址请求接口)
xxx.com 域名原本是指向 127.0.0.1 的服务器,但 DNS 服务器污染后变成指向 123.0.0.1 了
paradoxs
2017-07-06 11:42:51 +08:00
让后台做转发啊, 这个部分访问你们后台提供的地址就行了.
icodesign
2017-07-06 11:45:49 +08:00
是真 `127.0.0.1` 吗.....

> 不可以直接通过 IP 地址请求接口
还有这种?最终都是 tcp 连接过去,说到底不还是 IP
wizardoz
2017-07-06 11:55:55 +08:00
那为啥不直接填 IP
wizardoz
2017-07-06 11:57:52 +08:00
域名的唯一意义就是得到 IP,说不可以通过 IP 地址请求表示不能理解。
如果是 HTTP 接口的话,在请求 Header 里面设置域名就可以了。
flyingghost
2017-07-06 12:05:15 +08:00
“不可以直接通过 IP 地址请求接口”
说明你并没有理解 HTTP。
建立连接填 IP,header 头填 host 字段,抓包确认看看。
noli
2017-07-06 12:50:14 +08:00
如果已知 ip 并且 ip 在 app 生命周期里不会变,那为啥不用 ip 直连?

如果觉得 ip 可能会变,使用了域名,又担心 dns 污染,那你要解决的问题就是防止 dns 污染而不是直接指定一个 ip。
q409195961
2017-07-06 12:53:52 +08:00
@icodesign @wizardoz @flyingghost 感谢回答!

比如访问 V2,DNS 服务器会返回 101.226.196.39 这个 IP,来访问网站

![image]( https://ooo.0o0.ooo/2017/07/06/595dc0b59b571.png)

但 V2 也有其他节点,比如我想强制让他用另一个 IP ( 61.49.62.98 )来请求。

在 PC 中,我只需修改 hosts 即可

```
61.49.62.98 www.v2ex.com
```

但我想在 APP 中实现,且不修改系统的 hosts。
sampeng
2017-07-06 12:54:12 +08:00
楼上这么多人心都操碎了。。。我猜楼主想表达的是,真实 ip 我有办法弄到,并且我有办法知道 dns 返回 ip 不对,但我怎么直接指定 ip,但是不用换域名呢。
答案 9 楼已说,自行 google
sampeng
2017-07-06 12:54:38 +08:00
@q409195961 配 header 头解决问题
blank_dlh
2017-07-06 13:00:07 +08:00
@q409195961 请求的时候,URL 里面用 IP,header 中加上 Host: 域名。这是常规的 HTTPDNS 的做法。
liuminghao233
2017-07-06 13:18:06 +08:00
自己发包选择 dns
自己解析 reply

不过按照楼主的逻辑
自己选择 dns 服务器也不能用 ip 只能用域名
如果这个域名又被污染 那岂不是无解的?
a554340466
2017-07-06 13:23:47 +08:00
九楼的方案就是啊
sobigfish
2017-07-06 13:26:49 +08:00
https://github.com/mattt/NSEtcHosts
lz 是想在 app 把特定的域名解析到特定的 IP 吧
sfz97308
2017-07-06 16:20:28 +08:00
@sobigfish 提供的应该是 lz 想要的

楼上好多人说直接通过 IP 访问,理论上可以,但在 iOS 9 之后,App Transport Security 是禁止直接通过 IP 地址访问的,必须通过域名,除非强制设置 NSAllowsArbitraryLoads
skylancer
2017-07-06 16:23:39 +08:00
喂喂.. 你们在喷卤煮不熟悉 HTTP 前,先看清人家说的是 iOS App,,,

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/373416

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX