如何在 Swift 中从 DNS 查询中获取真实的 IP 地址?

2023-12-25

我想从 Swift 中的 DNS 查询获取 IP 地址(如 192.168.0.1 或 87.12.56.50)。我用 100 种不同的方法尝试了 100 次……没有任何帮助,所以我不得不寻求帮助。 到目前为止,这是我的代码:

let host = CFHostCreateWithName(nil,"subdomain.of.stackoverflow.com").takeUnretainedValue();
CFHostStartInfoResolution(host, .Addresses, nil);
var success: Boolean = 0;
let addresses = CFHostGetAddressing(host, &success).takeUnretainedValue() as NSArray;
if(addresses.count > 0){
   let theAddress = addresses[0] as NSData;
   println(theAddress);
}

好的...这些是我尝试实现但没有成功的代码的链接:https://gist.github.com/mikeash/bca3a341db74221625f5 https://gist.github.com/mikeash/bca3a341db74221625f5
如何在iOS上进行DNS查询 https://stackoverflow.com/questions/5000441/how-to-perform-dns-query-on-ios
在 Swift 中从 NSData 对象创建数组 https://stackoverflow.com/questions/24516170/create-an-array-in-swift-from-an-nsdata-object
CFHostGetAddressing() 是否支持 ipv6 DNS 条目? https://stackoverflow.com/questions/24796142/does-cfhostgetaddressing-support-ipv6-dns-entries
在 Swift 中进行简单的 DNS 查找 https://stackoverflow.com/questions/24898001/do-a-simple-dns-lookup-in-swift


您的代码以“套接字地址”结构的形式检索地址。getnameinfo()可用于将地址转换为数字 IP 字符串 (代码回收自https://stackoverflow.com/a/25627545/1187415 https://stackoverflow.com/a/25627545/1187415, 现在更新为Swift 2):

let host = CFHostCreateWithName(nil,"www.google.com").takeRetainedValue()
CFHostStartInfoResolution(host, .Addresses, nil)
var success: DarwinBoolean = false
if let addresses = CFHostGetAddressing(host, &success)?.takeUnretainedValue() as NSArray?,
    let theAddress = addresses.firstObject as? NSData {
    var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0)
    if getnameinfo(UnsafePointer(theAddress.bytes), socklen_t(theAddress.length),
        &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {
            if let numAddress = String.fromCString(hostname) {
                print(numAddress)
            }
    }
}

输出(示例):173.194.112.147

另请注意使用takeRetainedValue()在第一行,因为CFHostCreateWithName()其名称中包含“Create”,因此返回 (+1) 保留 目的。


Swift 3/Xcode 8 更新:

let host = CFHostCreateWithName(nil,"www.google.com" as CFString).takeRetainedValue()
CFHostStartInfoResolution(host, .addresses, nil)
var success: DarwinBoolean = false
if let addresses = CFHostGetAddressing(host, &success)?.takeUnretainedValue() as NSArray?,
    let theAddress = addresses.firstObject as? NSData {
    var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
    if getnameinfo(theAddress.bytes.assumingMemoryBound(to: sockaddr.self), socklen_t(theAddress.length),
                   &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {
        let numAddress = String(cString: hostname)
        print(numAddress)
    }
}

或者,为了得到all主机的 IP 地址:

let host = CFHostCreateWithName(nil,"www.google.com" as CFString).takeRetainedValue()
CFHostStartInfoResolution(host, .addresses, nil)
var success: DarwinBoolean = false
if let addresses = CFHostGetAddressing(host, &success)?.takeUnretainedValue() as NSArray? {
    for case let theAddress as NSData in addresses {
        var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
        if getnameinfo(theAddress.bytes.assumingMemoryBound(to: sockaddr.self), socklen_t(theAddress.length),
                       &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 {
            let numAddress = String(cString: hostname)
            print(numAddress)
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中从 DNS 查询中获取真实的 IP 地址? 的相关文章

  • SwiftUI:如何使用 @Binding 变量实现自定义 init

    我正在制作金钱输入屏幕 我需要实施自定义init根据初始化量设置状态变量 我认为以下方法会起作用 struct AmountView View Binding var amount Double State var includeDecim
  • 如何计算iOS 11不同方向的尺寸?

    我根据具有水平滚动和自定义布局的 UICollectionView 的安全区域来计算 itemSize 但对于 iPhone X 来说 安全区域对于不同的方向有不同的大小 我的问题是如何计算 viewWillTransition 函数中横向
  • 更改accessoryType Swift 的颜色

    我想将我的手机配件类型的颜色从蓝色更改为白色 textColor 已设置为白色 你们有人知道该怎么做吗 My Code cell accessoryType UITableViewCellAccessoryType Checkmark 您可
  • 如何使我的 Objective-C 类符合 Swift 的“Equatable”协议?

    我有一个 Objective C 类 恰好是一个按钮 但这并不重要 在我的 混合语言 项目的另一部分 我有一个这些按钮的数组 我想获取索引使用按钮的find 方法 就像这样 func doSomethingWithThisButtonInd
  • Apple Watch 表 - 前 4 行未出现

    我在添加行时遇到问题WKInterfaceTable在苹果手表上 奇怪的是 无论我做什么 前 4 行都显示为空 我尝试手动添加行并循环 没关系 我相信我的代码很好 因为第五行和其他行看起来都很好 发生的情况如下 进一步滚动 My code
  • UIImage 在编码/解码时不等效

    我一直在对我的模型进行一些测试 以确保当我将它们编码为 JSON 然后使用它们解码回来时它们是相等的JSONEncoder Decoder 然而 我的一项测试失败了 罪魁祸首是UIImage 我已确保在编码 解码过程中没有抛出任何错误 首先
  • Firebase数据库在批准后保存数据

    我在 iOS 应用程序上使用 firebase 数据库 我正在快速写作 我正在使用 发送 按钮在我的 firebaseDatabase 上写入数据 例如文本字段和标签值 有什么方法可以接受或拒绝我的数据库中的数据吗 我的意思是 如果用户向文
  • 如何在 Swift 中使用具有相同协议变量的多个协议?

    我很快就实现了两个协议 GADCustomEventInterstitial and GADCustomEventBanner 这两个协议都需要一个名为delegate delegate每个协议中的类型不同 因此会产生冲突 class Ch
  • 快速转换:错误 - CGPathAddArc

    我正在尝试将我的 Swift 2 代码转换为最新语法 Swift 3 我收到以下错误 Nil 与预期的参数类型 UnsafePointer 不兼容 斯威夫特2代码 CGPathAddArc 路径 nil overlayView frame
  • 计算 Swift 4 中的时差

    如果我有两个变量 10 30 和另一个 1 20 有没有办法获得它们之间的 2小时50分钟 的时间差 我在下面尝试过这个 func calcTime time1 String time2 String gt String let time1
  • 如何使用 Swift 关闭打开的文件?

    我正在下载约 1300 张图像 这些是小图像 总大小约为 500KB 但是 下载并将它们放入 userDefault 后 我 收到如下错误 libsystem network dylib nw route get ifindex 套接字 P
  • XCode 12.5 缺少权利 com.apple.developer.linked-appclip-app-identifiers

    将 Xcode 版本更新到 12 5 后 我遇到了 App Clip 问题 在 App Store Connect 上传期间 我收到警告 TMS 90876 Missing entitlement This app contains an
  • ViewController.swift(界面)文件的用途是什么 - 在 Counterparts 中

    我刚刚注意到一个名为ViewController swift Interface 当我创建第一个 ViewController 时 Xcode 自动创建了它 Swift 中的类是否具有 需要与 Objective C 中相同的接口 并且由
  • 无法在 mac 屏幕保护程序发布版本上加载图像(它适用于 Xcode 调试版本)

    我从这里得到了这个 mac 屏幕保护程序示例here https github com elpsk PaskySaver 我将其更改为显示图像而不是文本字段 问题是这样的 它可以显示任何 Xcode 对象 例如 textView textF
  • 使 Swift 类符合需要 init 的协议

    我有以下内容protocol in Swift protocol FooConvertible typealias FooType init foo FooType 我会做Swift类在类定义中符合它 class Bar FooConver
  • 使用 Swift 更改整个应用程序中的 UILabel 文本颜色

    在 Swift 中有什么方法可以在整个应用程序中立即更改 UILabel 的文本颜色属性吗 我尝试过使用外观属性 但这不适用于 UILabel textColor 任何方式或任何同样工作的库 一种方法是使用颜色设置 首先在您的 xcasse
  • 如何避免父ScrollView裁剪内部ScrollView?

    When a horizontal child ScrollView is nested inside a vertical parent ScrollView internal element is clipped by parent S
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop
  • 根据IP地址确定公司名称

    我对这个广泛的问题表示歉意 但我有一个 IP 地址列表 并且想将它们连接到它们来自的公司 我对识别个人 IP 地址信息不感兴趣 可能甚至不可能 但我认为必须有一种方法来识别 IP 地址是否与大公司相关 Whois net 通常只提供 ISP
  • 即时将图像添加到 AR 资源以进行图像识别

    ARKit1 5介绍图像识别 在代码中 您必须创建一组参考图像 如下所示 let referenceImages ARReferenceImage referenceImages inGroupNamed AR Resources bund

随机推荐

  • 连接两个表后访问所有数据并使用 linq 将它们分组

    我有两张桌子 TableA aId aValue TableB bId aId bValue 我想通过以下方式加入这两个表aId 然后从那里将它们分组bValue var result from a in db TableA join b
  • 添加一个新列并用 Oracle SQL 中另一列的一部分填充它

    我想在表中添加一个新列 并用另一列的最后 3 个字符填充它 两者都是 varchar 源列应保持不变 我想避免创建临时列 而是想了解如何在单个查询中执行此操作 谢谢 最好使用虚拟列 https oracle base com article
  • Ajax 侦听器事件 valueChange 似乎触发 onClick 而不是 onChange

    我有一个想要显示的嵌套问题列表 最初 我显示 1 级问题 然后根据用户对其父问题的回答显示子问题 所有问题都有一个单选按钮 有些问题有一个输入框 用于在用户选择 是 时显示附加信息 这是我的带有嵌套数据表的 JSF 代码 请注意 我已经取消
  • 克服 x86 idiv #DE 异常

    回复 x86 汇编语言 我有三个 32 位有符号数 n1 n2 和 n3 我想对 n1 乘以 n2 进行 imul 以获得 64 位带符号的结果 然后我想将该 64 位结果除以 n3 问题是 如果 64 位有符号结果足够大和 或 n3 足够
  • React 原生深度链接与 Facebook SDK 冲突

    我在我的react native应用程序中使用Facebook SDK 现在我还想添加对通用深度链接的支持 我按照此处的说明修改了我的应用程序委托 https developers facebook com docs ios getting
  • 使用 HttpServletRequest 获取请求发送者的 URL

    如何使用 HttpServletRequest 获取源域 源域是请求者的域 Thanks 你可以做任何一个 gets client browser s hostname String host request getRemoteHost O
  • 如何禁用按下按键时列表框自动选择项目

    我有一个列表框 我想在该列表框中复制并粘贴项目 复制和粘贴工作正常 但每次我按 Crtl C 时 都会自动选择以字母 C 开头的项目 可以禁用此自动选择还是我在这里遗漏了一些东西 这是我实现的复制粘贴方法 private void list
  • urllib2:读取 https url 失败

    此代码在我的 Ubuntu 上失败 但在其他主机上运行良好 gt gt gt from urllib2 import urlopen gt gt gt urlopen https courtapps utcourts gov Xchange
  • 客户端使用的数据库历史记录

    我试图找出在数据库上记录历史记录 跟踪已完成的任何插入 删除 更新的最佳方法是什么 历史数据需要编码到前端 因为它将被用户使用 创建 历史表 用于存储历史记录的每个表的副本 并不是一个好方法 因为数据分布在多个表中 此时 我最好的想法是创建
  • 在 Flash 中从中心缩放

    我正在使用 flash AS3 并且有一个动态影片剪辑 我想使用滑块放大或缩小该影片剪辑 我使用scaleX和scaleY函数使这个工作得很好 唯一的麻烦是这些从文档的左侧缩放 我希望它从中心缩放 任何帮助表示赞赏 function sca
  • JavaScript 文件在 ASP.NET Core 区域中的位置

    我正在创建一个 ASP NET Core 应用程序 其中包含多个区域 我应该在哪里添加特定于某个区域的 JavaScript 文件 通常我将它们放入 wwwroot js 文件夹中 某个区域有类似的东西吗 我应该在哪里添加 JavaScri
  • 使 Amazon S3 文件仅对登录用户可用

    如何使 Amazon S3 中的文件仅可供登录用户访问 我的网站使用 PHP 静态文件存储在 Amazon S3 中 只有登录到我的网站的用户才应该能够访问亚马逊云中的文件 是否可以 您可以使用应用程序根据用户登录生成的签名 URL htt
  • Python 在从函数返回时挂起

    假设我在一个相当复杂的 Flask 应用程序中有两个函数 一个函数调用另一个函数 def dispatch unlock stuff log dis start this routine just sends some data over
  • C++ TlHelp32.h 不工作?

    尽管我不断收到消息 但我已正确包含 TlHelp32 h 标头 错误 标识符 CreateToolhelp32Snapshot 未定义 尝试使用 CreateToolhelp32Snapshot 时 当我在 VS 中使用 查看定义 功能时
  • 如何在表格中间画一个圆以及如何找到圆心?

    using System using System Collections Generic using System ComponentModel using System Data using System Drawing using S
  • 如何最有效地移动、重命名文件并记录此操作?

    我有以下 CSV 列表 实际上有 1000 行 needle code 123456 AB 121212 BB 33333333 CVV 我有一个目录 C old files 包含 PDF 文件 实际上是 1000 个 dsadsadsa
  • 如何检测AngularJS点击时按下的按键

    I m using angularjs on a web application that I need to figure out how can I detect is keys like ctrl shift or alt are p
  • matlab中如何退出两个嵌套的for循环

    我有一个while我有两个循环for循环 我内心有一个条件for环形 每当这个条件满足时我想同时退出这两个for循环并继续while loop while 1 for x 1 20 for y 1 30 if condition end e
  • 在unix目录下的文件中快速搜索文本?

    有没有一个好的解决方案来执行类似的搜索 find name xargs grep some text 但由于离线索引 搜索速度要快得多 支持通配符或轻型正则表达式会很好 但即使是由于离线预处理而可以运行得非常快的原始文本搜索也很棒 我认为这
  • 如何在 Swift 中从 DNS 查询中获取真实的 IP 地址?

    我想从 Swift 中的 DNS 查询获取 IP 地址 如 192 168 0 1 或 87 12 56 50 我用 100 种不同的方法尝试了 100 次 没有任何帮助 所以我不得不寻求帮助 到目前为止 这是我的代码 let host C