快速获取当前设备在 wifi 和蜂窝网络中的 IP 地址

2024-04-16

   func getIPAddress() -> String {
    var address: String?
    var ifaddr: UnsafeMutablePointer<ifaddrs>? = nil
    if getifaddrs(&ifaddr) == 0 {
        var ptr = ifaddr
        while ptr != nil {
            defer { ptr = ptr?.pointee.ifa_next }

            let interface = ptr?.pointee
            let addrFamily = interface?.ifa_addr.pointee.sa_family
            if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {

                // wifi = ["en0"]
                // wired = ["en2", "en3", "en4"]
                // cellular = ["pdp_ip0","pdp_ip1","pdp_ip2","pdp_ip3"]

                let name: String = String(cString: (interface!.ifa_name))
                if  name == "en0" || name == "en2" || name == "en3" || name == "en4" || name == "pdp_ip0" || name == "pdp_ip1" || name == "pdp_ip2" || name == "pdp_ip3" {
                    var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                    getnameinfo(interface?.ifa_addr, socklen_t((interface?.ifa_addr.pointee.sa_len)!), &hostname, socklen_t(hostname.count), nil, socklen_t(0), NI_NUMERICHOST)
                    address = String(cString: hostname)
                }
            }
        }
        freeifaddrs(ifaddr)
    }
    return address ?? ""
}

我已经使用了这个并在 iOS 模拟器中运行该程序,它给出了 nil 值。我已在其中添加了桥接标头文件和#include。

用于检索我使用过的值

let stringIPAddress : String = self.getIPAddress()

我可以知道是否可以使用模拟器获取IP地址


代码适用于 Swift 5+ 和 iOS 13+

To get IP地址转动时装置的Wifi or Wired or 移动数据打开,使用以下方法:

func getIPAddress() -> String? {
    var address : String?

    // Get list of all interfaces on the local machine:
    var ifaddr : UnsafeMutablePointer<ifaddrs>?
    guard getifaddrs(&ifaddr) == 0 else { return nil }
    guard let firstAddr = ifaddr else { return nil }

    // For each interface ...
    for ifptr in sequence(first: firstAddr, next: { $0.pointee.ifa_next }) {
        let interface = ifptr.pointee

        // Check for IPv4 or IPv6 interface:
        let addrFamily = interface.ifa_addr.pointee.sa_family
        if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {

            // Check interface name:
            // wifi = ["en0"]
            // wired = ["en2", "en3", "en4"]
            // cellular = ["pdp_ip0","pdp_ip1","pdp_ip2","pdp_ip3"]
            
            let name = String(cString: interface.ifa_name)
            if  name == "en0" || name == "en2" || name == "en3" || name == "en4" || name == "pdp_ip0" || name == "pdp_ip1" || name == "pdp_ip2" || name == "pdp_ip3" {

                // Convert interface address to a human readable string:
                var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),
                            &hostname, socklen_t(hostname.count),
                            nil, socklen_t(0), NI_NUMERICHOST)
                address = String(cString: hostname)
            }
        }
    }
    freeifaddrs(ifaddr)

    return address
}

在这里,代码/检查适用于Wifi, Wired and 移动数据 is:

如果名称==“en0”||名称 == "en2" ||名称 == "en3" ||名称 == "en4" ||名称==“pdp_ip0”||名称==“pdp_ip1”||名称==“pdp_ip2”||名称==“pdp_ip3”

希望能有所帮助! :)

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

快速获取当前设备在 wifi 和蜂窝网络中的 IP 地址 的相关文章

  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • SwiftUI 更新主菜单 [已解决] kludgey

    真正的问题 你如何更新mainMenu在 SwiftUI 中 它真的可以工作吗 我在 SwiftUI 中构建了一个基于 MacOS 文档的应用程序 其中包括所有内置的文件菜单命令 即关闭 保存 复制 重命名 等 在保存文档之前 我会验证结构
  • git 可以与 Xcode 集成吗?

    有没有办法将 git 存储库与 Xcode 内置的 SCM 功能一起使用 Xcode 4 原生支持 git WWDC 2010 上的开发者工具国情咨文演讲 在这里了解更多 Xcode 4 中的新增功能 http developer appl
  • UIApplication.shared.delegate 相当于 SceneDelegate xcode11?

    我在 SceneDelegate 中定义了一个 let 属性 我希望一些 ViewController 能够在场景中访问它 在 UIKit 中 我可以像这样访问 App Delegate 属性 UIApplication shared de
  • Swift 中的 quitFirstResponder

    我怎样才能用Apple的新语言实现它 Objective C 代码 void touchesBegan NSSet touches withEvent UIEvent event for UIView view in self view s
  • 在 iOS 上使用 HEVC 编码器输出视频尺寸巨大

    我有一个项目 目前使用 H 264 编码器在 iOS 上录制视频 我想尝试在 iOS 11 中使用新的 HEVC 编码器来减小文件大小 但发现使用 HEVC 编码器会导致文件大小急剧膨胀 GitHub 上的一个项目显示了该问题 它使用 H
  • cmake 生成 Xcode 项目 - 发布构建有效,但存档因链接器错误而失败

    使用 Xcode 6 3 1 CMake 3 2 2 我有一个与图书馆链接的项目 该库作为代码包含在 xcode project 中 经过编译 然后与主可执行文件链接 项目是用cmake生成的 CMakeLists txt 的一些摘录 ad
  • 删除具有estimatedItemSize 的项目时 UICollectionView 单元格大小会调整

    我有一个简单的项目 其中的故事板仅包含一个UICollectionViewController 使用 Xcode 7 1 1 为 iOS 9 1 构建 class ViewController UICollectionViewControl
  • AppDelegate 的变量用作全局变量不起作用

    我想使用我的 AppDelegate 来存储任何其他类都可以访问的对象 我已经像这样声明了这个 AppDelegate interface MyAppDelegate UIResponder
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • Xcode 4 调试器代码完成

    首先 很高兴他们尝试在 Xcode 4 中的 gdb 命令提示符上完成代码 但在当前状态下 它使得使用命令提示符来调查目标 c 对象几乎不可能 当我打字时 它自动将单词补全为我不想要的内容 并且如果不手动选择文本并将其删除 然后重新开始 则
  • iOS 11 浮动 TableView 标题

    有一个应用程序包含多个部分 展开 时每个部分有几行 折叠 时没有 每个部分都有一个部分标题 使用以下子类重用它们UITableViewHeaderFooterView等等 到目前为止一切顺利 然后在 iOS 11 中 我使用了可视化调试器
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • 如何使用 Swift 将“完成”按钮添加到 iOS 中的数字键盘?

    它在默认键盘上工作得很好 但我无法让它在数字键盘上工作 有任何想法吗 据我所知 你不能在键盘部分添加 完成 按钮 你应该添加一个inputAccessoryView to the UITextField or UITextView 如果这就
  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • 将 Armadillo C++ 库导入 Xcode

    我是 Mac 用户 正在尝试安装和导入 C Armadillo 库 以下是我到目前为止所采取的步骤 1 我从其网站下载了犰狳库 2 我仔细阅读了下载文件中的 Readme txt 文件 解释了如何安装它 3 我使用CMake将犰狳下载文件制
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • 使用 BGTaskScheduler 进行后台获取与调试模拟完美配合,但在实践中却不起作用

    我在 appDelegate 的 didFinishLaunchingWithOptions 中注册后台获取任务 BGTaskScheduler shared register forTaskWithIdentifier Backgroun
  • 检查 Swift 中关联类型是否符合协议

    在类似情况下 如何检查对象是否符合 可表示 协议 protocol Representable associatedtype RepresentType var representType RepresentType get set cla
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview

随机推荐

  • Docker mysql 主机没有特权

    我正在尝试配置一个nodejs 容器来连接到mysql 数据库 我的代码如下所示 var pool mysql createPool host mysql port 3306 user root password database gene
  • IE8 不渲染某些 HTML 名称实体

    某些 HTML 名称实体未在 IE8 中呈现 相反我可以看到未呈现的 HTML 实体 例如 scedil or inodot 我找到了一个使用 HTML 数字实体的解决方案 例如 351 代替 scedil 我想知道是否有人知道这个问题的原
  • 除了扩展名之外,.json、.txt、.html、.css 和 .js 文件之间有什么区别吗?

    动力是 我有一些 JSON 我已经将其保存为 txt 文件一段时间了 我想将它们全部重命名为 json 以更准确 我很确定它们都是 UTF 8 大多数可以通过 Ajax 发送的文件也是如此 无论如何 这个问题提出了一个更大的问题 除了扩展名
  • 使用 jQuery 传递 POST 数据时打开 URL

    是否可以使用 jQuery 更改页面 URL 同时将发布数据传递到新页面 如果您的意思是要更改current页面 URL 那么您可以添加新的
  • 在没有互联网的情况下使用 Javascript 获取 GPS 位置 [重复]

    这个问题在这里已经有答案了 您好 如果设备具有 GPS 硬件 我们可以在没有互联网连接的情况下使用 JavaScript 获取 GPS 位置吗 请注意谁将其标记为重复 我需要 JavaScript 在没有互联网连接的情况下工作 并使用 GP
  • 从 mysql 表获取行到 php 数组

    如何获取 mysql 表的每一行并将其放入 php 数组中 我需要一个多维数组吗 所有这一切的目的是稍后在谷歌地图上显示一些点 您需要从表中获取所需的所有数据 像这样的事情会起作用 SQLCommand SELECT someFieldNa
  • 如何使用 CSS 更改图标图像的颜色? [复制]

    这个问题在这里已经有答案了 我想弄清楚如何更改半透明和半纯色图像的颜色 我希望能够更改白色的颜色 这样我就可以添加悬停 并添加以动态方式更改 WordPress 中颜色的功能 使用 Photoshop 来填充图像不是一个选项 因为我要在我的
  • Android 将 Px 转换为 Dp(视频宽高比)[重复]

    这个问题在这里已经有答案了 可能的重复 在android中将像素转换为dp https stackoverflow com questions 4605527 converting pixels to dp in android 我正在尝试
  • 有没有办法为 Heroku Toolbelt 设置默认应用程序?

    我在heroku上有多个app git远程 我想知道是否可以配置一个默认应用程序 这样 每当我忘记指定应用程序时 app 工具带会使用它 您可以设置heroku remote在存储库的 Git 配置中键入默认远程名称 例如 如果您的遥控器被
  • Gradle:战争任务有冲突的包含/排除

    我正在尝试使用 Gradle 构建一个 war 文件 但遇到了一个问题 即排除一个目录并包含另一个恰好具有相同名称但父目录不同的目录 请注意 在下面的第一个代码示例中 两者都没有css 目录将包含在最终版本中war文件 我假设是因为 Gra
  • 如何设置 JSlider 的大小?

    我在网上搜索了此问题的解决方案 但没有找到任何有效的方法 我在 JPanel 中有一个垂直 JSlider 它使用 GridBagLayout 和 GridBagConstraints 将对象定位在面板上 目前我有以下代码 gbc grid
  • 有返回值的 C void 函数

    据我所知 returnvoid 函数中的语句将引发错误 但在下面的程序中 情况并非如此 这里显示的输出是1 怎么会 main int i 5 printf d fun fun fun i void fun int i if i 2 retu
  • R 图中行的恒定绝对间距

    In R 我该如何调整height绘图设备的价值 例如 windows or png 以便点之间的绝对间距保持不变 这是一个例子来说明我的意思 n lt 10 windows width 4 height 4 par xpd NA plot
  • 带水平滚动的 C3 / D3 条形图

    我正在创建一个 c3 条形图 其中每个条形代表在给定的一周内加入某个计划的人数 数据只是一个对象数组 其中包含 week of people week of people 等 理想情况下 我希望图表中显示最近 6 周的数据 但我希望能够水平
  • Windows 上 Python 3.4 中的 Tkinter 在退出时不会将内部剪贴板数据发布到 Windows 剪贴板

    我使用以下代码将小脚本的结果放置在剪贴板中 from tkinter import Tk r Tk r withdraw r clipboard clear r clipboard append Result 它在 Python 3 3 5
  • 如何使用 Celery、RabbitMQ 和 Django 确保每个用户的任务执行顺序?

    我正在运行 Django Celery 和 RabbitMQ 我想要实现的是确保与一个用户相关的任务按顺序执行 具体来说 一次执行一个 我不希望每个用户执行任务并发 每当为用户添加新任务时 它应该取决于最近添加的任务 如果此类型的任务已为此
  • 和发动机施加力

    有谁知道为什么 applyforce 只适用于我的精灵之一 此外 当我按下其他精灵时 它也会对单个精灵施加力 nextTile 方法工作正常 enter code herecom martynnorman jude 包 作者尼古拉斯 格拉姆
  • css - 垂直滚动条删除

    下面是带有左右附加图像的菜单行的代码 我需要这样的行为 当屏幕宽度的分辨率从 960px 到 1398px 时 左右 div 同时隐藏 这段代码完全符合我的要求 问题是 在低屏幕宽度 960px 到 1398px 上 它会向浏览器添加水平滚
  • Facebook Messenger Bot 可以与群组中的两个或更多人聊天吗?

    所有消息机器人一次只与一名用户直接交互吗 机器人可以加入两人或多人组成的群组并与他们交谈吗 目前 Facebook Messenger 机器人只能在一对一的基础上工作 原因之一可能是隐私 Facebook 在在群组环境中推出机器人之前非常谨
  • 快速获取当前设备在 wifi 和蜂窝网络中的 IP 地址

    func getIPAddress gt String var address String var ifaddr UnsafeMutablePointer