Swift 5 的 ICMP ping 客户端
本项目基于 SwiftPing:https://github.com/ankitthakur/SwiftPing。
// Ping indefinitely
let pinger = try? SwiftyPing(host: "1.1.1.1", configuration: PingConfiguration(interval: 0.5, with: 5), queue: DispatchQueue.global())
pinger?.observer = { (response) in
let duration = response.duration
print(duration)
}
try? pinger?.startPinging()
// Ping once
let once = try? SwiftyPing(host: "1.1.1.1", configuration: PingConfiguration(interval: 0.5, with: 5), queue: DispatchQueue.global())
once?.observer = { (response) in
let duration = response.duration
print(duration)
}
once?.targetCount = 1
try? once?.startPinging()
只需将 SwiftyPing.swift 文件拖放到你的项目中即可。在 Mac 应用程序中使用 SwiftyPing 需要在应用程序沙箱中允许“网络 -> 传入连接”和“网络 -> 传出连接”。
你也可以使用 Swift 包管理器
.Package(url: "https://github.com/samiyr/SwiftyPing.git", branch: "master")
我创建这个项目是基于我的需求,所以除非我真的需要,否则我可能不会添加任何功能。我至少会在一段时间内维护它(意味着错误修复和对新 Swift 版本的支持)。但是,你可以提交拉取请求,我会查看。请尽量保持整体编码风格。
这是底层代码,基本上是将 C 代码翻译成 Swift。这意味着存在从原始字节到 Swift 结构体的不安全转换,Swift 通常的类型安全检查不再适用。这些转换可能会不优雅地失败(抛出异常),甚至可能被用作漏洞利用(我不是安全研究员,因此没有专业知识来确定),所以请谨慎使用,尤其是在 ping 不受信任的主机时。
此外,虽然我认为 API 现在是稳定的,但我不做任何保证 —— 某些新版本可能会破坏旧的功能。
你可以几乎以任何你想要的方式使用它。官方授权基于 MIT 许可证。