【问题标题】:Is there a good way to override a DNS in an iOS app?有没有在 iOS 应用程序中覆盖 DNS 的好方法?
【发布时间】:2012-09-27 21:25:12
【问题描述】:

基本上,我想为 URL 创建一个虚假的 DNS 条目,并强制该 URL 解析为特定 IP。有没有办法在 iOS 中做到这一点,不会让应用程序被拒绝?我似乎无法找到一种方法来做到这一点(仍然在第一方)。谁能指出我正确的方向(类参考、第三方框架等)?如果没有,是否有我忽略的规则/政策/其他东西使它不可能?

【问题讨论】:

  • 越狱了?可能需要那个。
  • 根据您的具体情况,这从微不足道到不可能。您是否尝试在您控制的 UIWebView 中执行此操作,或者您是否尝试针对 Web 视图以外的其他内容执行此操作,但在您的应用程序中(例如 NSURLConnection?),或者您是否尝试影响您自己的应用程序以外的应用程序(如 MobileSafari)?您真的需要修改 DNS 响应,还是只想重定向某些 Web 请求?

标签: ios xcode dns ip


【解决方案1】:

您不能在 iOS 应用程序级别正式执行此操作,因为 DNS 是由操作系统设置的,并且由于 iOS 沙盒,您无法修改条目。这意味着如果您正在创建一个您将提交到 Apple App Store 的应用程序,这是不可能的。你可以在你自己的应用程序中构建一些东西,如果你有一些浏览器,你拦截 URL 并重定向它,但当然这将在你的应用程序中本地,而不是当用户使用 Mobile Safari 或 Chrome 等时。

如果您正在为越狱设备创建应用程序,您可以修改 /etc/hosts 文件并在其中添加您的条目​​

【讨论】:

  • 感谢您的回答。我预计情况可能是这样,但我想我会检查一下。我想我们必须想办法解决它,因为 Apple 会说“nuh-uh”
【解决方案2】:

一个简单的解决方案:
比方说,你想 GET http://httpbin.org/get,
而且你不想使用domian,而是使用ip地址54.175.219.8
你可以提出一个请求,将http://54.175.219.8/get设置为path,并添加一个新的http头:{“host”:“httpbin.org”}。

一般解决方案:
实现你自己的 NSURLProtocol,比如https://github.com/mattt/NSEtcHosts

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多