iOS:reachabilityWithHostname YES,尽管它应该是NO

2024-01-05

我测试了不同的框架,例如

  • https://github.com/tonymillion/Reachability https://github.com/tonymillion/Reachability
  • https://github.com/VerticodeLabs/VCLReachability https://github.com/VerticodeLabs/VCLReachability
  • https://github.com/kstenerud/KSreachability https://github.com/kstenerud/KSReachability

我想知道是否可以联系到主机。在我的 iPhone 上,我将 iMac 设置为代理 (Charles) 并阻止或不阻止连接,但可达性始终为“是”。仅当我设置一个不存在的主机时,它才会返回 NO。但是如果主机存在但我阻止了与其的连接,我总是会得到isReachable。有没有办法检查主机是否really可达吗?

如果我尝试使用 KSreachability,我将执行以下操作:

self.reachability = [KSReachability reachabilityToHost:@"www.stackoverflow.com"];
self.reachability.notificationName = kDefaultNetworkReachabilityChangedNotification;
self.reachability.onReachabilityChanged = ^(KSReachability *reachability) {
    NSLog(@"isReachable: %i", reachability.reachable);
};

我总是得到isReachable: 1有以下配置:

  • 已连接至 Wi-Fi
  • 将我的 iMac 配置为 HTTP 代理
  • 在我的 Charles 代理中阻止 www.stackoverflow.com

当我尝试在 Safari 中访问 www.stackoverflow.com 时,该页面无法打开(如预期)。我希望可达性是错误的(isReachable: 0) 在这种情况下。

EDIT所以对我来说最重要的问题是 - 如何实现我期望的行为? IE。该应用程序不断检查给定的主机是否really可达吗?


代码声明:

self.reachability = [KSReachability reachabilityToHost:@"www.stackoverflow.com"];

实际上调用下面的方法:

SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL,
                                                          [hostName UTF8String]);

SCNetworkReachability 参考资料说:

SCNetworkReachability 编程接口允许应用程序 确定系统当前网络配置的状态 以及目标主机的可达性。考虑远程主机 当应用程序将数据包发送到网络时可达 堆栈,可以离开本地设备。不保证可达性 数据包实际上会被主机接收。

解释清楚地表明,iOS 系统不会向外界发送任何请求来检查可达性。它只是告诉数据包是否可以离开设备。如果系统发送请求,则自动意味着它已连接到网络。

您可以通过提及“www.stackoverflow.com”等有效主机来验证这一点,并检查 charles(首先取消阻止它)是否未发送任何请求。您还可以检查其他有效主机名,如“www.abcdefgh.com”(通过在 Safari 中运行它来验证这一点,并在 charles 中查看)它也为您提供了可达性,但 charles 没有显示任何请求。此外,如果您将 http:// 放在任何有效主机之前,例如“http://www.stackoverflow.com http://www.stackoverflow.com“它也会导致可达性失败。因此很明显,这不是一个传出的 http 请求。如果系统必须向外部发送请求,那么提供该类的意义何在?开发人员可以创建一个网络连接并尝试连接到主机并查看它是否通过或失败。

然而有趣的是,如果提供了像“www.hjjkhkhk.com”这样的无效主机,iOS 系统会将可达性视为错误。现在的问题是iOS系统如何在不向外界发送任何查询的情况下找到有效或无效的主机?可能是它定期缓存 DNS 范围列表???对我来说极不可能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS:reachabilityWithHostname YES,尽管它应该是NO 的相关文章

  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • 更改 UITextField 辅助功能描述

    有没有办法将 UITextField 的辅助功能标签设置为 文本字段 之外的其他内容 因此 我不想将其称为 文本字段 而是将其命名为 代码验证字段 我的建议是不要试图在内置语音输出上智取系统 对于盲人用户来说 文本字段正在编辑 相当于 该项
  • 为了支持 iPhone 5 的更长屏幕,需要检查什么? [复制]

    这个问题在这里已经有答案了 可能的重复 iPhone 5屏幕尺寸如何处理 https stackoverflow com questions 12396545 how to deal with iphone 5 screen size iP
  • iPad 3 中配备 Xcode 4.2 和 Retina 的 iOS 5.1

    我有一台装有 Mac OS X Snow Leopard 的 Mac 我可以添加 iOS 5 1 吗 使用 iPad 3 的新分辨率 我们将如何处理图像 因为如果该应用程序将在 iPhone 3GS 4 和 iPad 3 中运行 我认为我们
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • 如果 NSExtensionActivationRule 设置为仅音频,则共享扩展不会出现在有功能的应用程序中

    我正在尝试创建一个共享扩展 用户可以从任何有能力的应用程序上传她的录音 该文档甚至有一个简单的示例 请参阅声明共享或操作扩展支持的数据类型 https developer apple com library content document
  • 如何在 Xcode 4 中通过一个操作归档多个目标

    我有一个包含多个目标的项目 这些目标都适用于不同的 iOS 应用程序 例如 一个用于精简版的目标 另一个用于专业版的目标 我想立即构建并归档我的所有应用程序 目前 我对每个目标都有一个方案 我用它来独立归档每个应用程序 但现在我必须开始归档
  • 当设置 setVisibleXRangeMaximum 时,iOS-Charts X 轴值无限重复

    我正在尝试绘制一个图表 其中 x 轴是TimeIntervalY 轴是power consumption 由于每天都会有数据 因此将有太多数据无法显示 因此 我想一次显示 5 个值 我通过设置实现了这一点self chart setVisi
  • 错误 ITMS-9000 iTunes Connect

    我正在尝试上传一个phonegap build iOS应用程序到应用程序商店 我不断收到此错误 ERROR ITMS 9000 Missing Code Signing Entitlements No entitlements found
  • UIViewController 作为单例

    我在标签栏应用程序中有一个 UIViewController 我已经从 MainWindow nib 文件添加了控制器 即不是以编程方式 我的问题是如何使我的视图控制器成为单例 解决 Facebook 委托问题 您可能想让您的 Facebo
  • 在 iOS 上的 SceneKit 中导入 3d 模型

    从 URL 导入 obj 文件并将其转换为 SCNNode 时遇到问题 这是代码 swift3 let url URL init string https cloud box com shared static ock9d81kakj91d
  • CocoaPods 生成无效的项目文件(未找到标头)

    我有一个带有 Podfile 的项目文件 如下所示 platform ios 7 0 def import pods pod Specta 0 1 8 pod Expecta 0 2 1 pod RestKit 0 20 3 pod Mag
  • 如何在 SwiftUI 中呈现视图而不将其嵌入到当前导航流中?

    我已经完成了日志记录入门 并且需要呈现一个 HomeView 它对之前的导航流程一无所知 var body some View if viewModel isValidated destination else LoadingView 通过
  • 从 AF.Request 响应获取数据

    我需要使用 Alamofire 的 Post 请求调用的 json 响应中的数据 但由于某种原因我无法访问该数据 我尝试按照 Alamofire github 文档以及这篇文章进行操作从 AF 响应 JSON 获取数据 https stac
  • 防止 UITableView 滚动到某个点以下

    如何让 UITableView 允许在某个索引行上方滚动 但在低于某个点时阻止滚动 例如 如果我有第 1 行到第 100 行 其中在给定时间视图中仅出现 5 行 我希望允许用户在第 1 50 行之间滚动 但在第 50 行可见时阻止进一步向下
  • AVAssetExportSession 输出文件

    AVAssetExportSession 输出文件应该是什么样子 我正在尝试压缩 ALAsset 项目中的视频 但它不起作用 我猜输出文件与它有关 这是我正在使用的代码 NSString destinationPath NSHomeDire
  • 如何相对于包含视图大小定位子视图?

    我希望能够将我的子视图从顶部定位到超级视图大小的 25 NSLayoutConstraint topPositionConstraint NSLayoutConstraint constraintWithItem containerView
  • 如何确定 UINavigationController 中工具栏的高度?

    我有一个带有由 UINavigationController 呈现的工具栏的视图 当我处理 UIKeyboardWillShowNotification 时 我将整个屏幕向上滚动键盘的高度 问题是当显示键盘时 底部工具栏不显示 所以我只需将
  • Parse 在哪里存储用户会话

    登录代码 PFUser logInWithUsernameInBackground self userTextField text password self passwordTextField text block PFUser user
  • 如何在 iOS 5 中使用 Embed Segue?

    iOS 6 引入了 Embed Segue 允许在 Storyboard 中使用自定义容器控制器 有没有办法在 iOS 5 上复制这个 这里的挑战是子视图控制器的视图通常要添加为父视图控制器的某些容器视图的子视图 因为你不能随机进行序列UI

随机推荐

  • 基于动态正则表达式的XPath搜索

    我有一个如下所示的 XML
  • 它们是“相同的”吗? (代码战争)

    我是一个初学者 我正在做一些代码战争的练习 这是练习的描述 练习链接 https www codewars com kata 550498447451fbbd7600041c train python 给定两个数组 a 和 b 编写一个函数
  • Android:发送短信 (sendTextMessage) 时出现 Unicode/字符集问题

    基本上我有一个工作应用程序 可以在收到短信后发送短信 一切正常 除非短信to send有 特殊字符 即 等 我已经尝试了很多方法 包括字符集转换 但我根本无法使其工作 msgText 总是返回字符集编码问题 这是发送消息的部分 if msg
  • Android加密/解密问题(AES)

    我在这里需要一点帮助 所以基本上我必须在 Android 中对图像进行 AES 加密 解密测试 我是 Android 编程新手 这就是为什么我的一个朋友给我一个例子来说明如何做到这一点 但问题是 当我运行示例时 它会在 20 30 秒后崩溃
  • 将自定义方法添加到 UI 对话框插件

    我正在使用 jQuery 的 UI 对话框 我想添加一个自定义方法 基本上 当我的对话框有一个 工作 类时 它里面有一个加载覆盖 我正在尝试编写一些全局应用程序 jQuery 以便当任何对话框关闭时 它都会删除 工作 类 我不太确定我在做什
  • 这个 Java 策略模式是否有多余的 Context 类?

    以下代码示例是策略模式的实现从维基百科复制 http en wikipedia org wiki Strategy pattern Java 我的完整问题如下 维基百科的main method StrategyExample test ap
  • 如何使用 Swift 创建带有 UITabBar 或 Segment Control 的 PageView?

    我对 iOS 还很陌生 我有一个问题 无法获得实施的确切想法 我在这里上传两个图像 所以请建议我如何使用 Swift 实现它 这是我的图像 在图像中 您可以看到对于单个 viewController 有两个选项卡 一个是 您的组 另一个是
  • 在 CLR 4.0 中加载/执行 CLR 2.0 程序集

    CLR 4 0 是否可以执行 CLR 2 0 IL 而无需重新编译源代码 这是一个好文章 http blogs msdn com clrteam archive 2009 06 07 in process side by side part
  • Tensorflow Keras 错误:未知的图像文件格式。需要 JPEG、PNG、GIF、BMP 之一

    我正在训练一个分类器 并确保所有图片都是 jpg 但仍然出现此错误 InvalidArgumentError 未知的图像文件格式 需要 JPEG PNG GIF BMP 之一 节点解码图像 解码图像 IteratorGetNext 操作 i
  • Swift 数组(重复:,计数:)行为

    为什么只有一个元素labels数组显示为子视图view 特别是当使用Array repeating count let labels Array repeating UILabel count 7 print labels count 7
  • 在应用程序之间发送信息

    再会 我有一个客户端应用程序 它将客户端打开的应用程序列表发送到服务器 它特别发送文件路径 文件名和主机名 我的问题是发送的数据在服务器接收时应该进行序列化和反序列化 我是 C 新手 所以我对序列化知之甚少 这是客户端 private Li
  • 如何获取客户/用户位置详细信息

    在我的应用程序中 我想跟踪客户端 用户位置以存储在数据库中 我正在使用此代码来获取用户 IP 地址 string VisitorsIPAddr string Empty if HttpContext Current Request Serv
  • Python 中从十六进制到补码

    有没有一种简单的方法可以在 python 中生成补码 例如 如果您采用十六进制值0x9E 我需要将其转换为0x61 我需要将二进制 1 替换为 0 将 0 替换为 1 感觉这个应该很简单 只需使用异或运算符 http docs python
  • 静态工具操作的静态类与静态结构?

    我需要创建一个仅包含静态方法的 工具 类或结构 对于具有 PHP 背景的人来说 结构实际上并不存在 我正在读这个为什么选择结构而不是类 https stackoverflow com questions 24232799 why choos
  • Javascript window.onload 无法在 iOS 强制门户/网络中工作

    我在 jsp 文件的标头中有这段代码 由于某种原因 它在桌面和移动浏览器上运行良好 但在 iOS 强制门户上 仅触发第一个警报 有谁知道为什么 我想到了 使用这个作品
  • REST API 中的查询参数可以是强制的吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个要求 规定必须有两个参数 其中一个代表日期 作为 GET URI 的一部分必须是强制性的 但这两个参数仅用于过滤目的 所以我的问题是 强
  • 禁用移动 Chrome 浏览器中的滑动手势

    移动版 Chrome IOS Android 有一个功能 如果您在屏幕的左侧或右侧边缘滑动 它会更改选项卡 我的网络应用程序使用滑动 而这个 功能 似乎只是妨碍 有办法禁用这个吗 不 没有办法禁用此手势 有一张请求该功能的票证位于https
  • JavaScript:递归查找树中元素的所有父级

    我有一棵这样的树 var datas tree name name1 tree name name2 name name3 name name4 tree name name5 name name6
  • 是否可以调整 PDFBOX 中的文本?

    PDFBOX API 中是否有任何功能可以使文本对齐 或者我们必须手动执行此操作 如果手动 那么如何使用java 其背后的逻辑 调整文本 这个较旧的答案 https stackoverflow com questions 19635275
  • iOS:reachabilityWithHostname YES,尽管它应该是NO

    我测试了不同的框架 例如 https github com tonymillion Reachability https github com tonymillion Reachability https github com Vertic