繁体   English   中英

将connectec连接到wifi时获取ios设备的IP地址

[英]Get IP address of ios device when connectec to wifi

任何人都可以在目标c中向我建议在设备连接到WiFi时获取iPhone设备IP地址的方法。

基本上,我想知道除了getifaddrs(&interfaces)之外,还有其他方法可以在设备连接到WiFi时检索设备的IP地址吗?

要获取有关iOS或Mac OS X等Unix类型系统中网络接口的信息,需要使用一些神秘的C API。 这些API在具有不同程度的可见性。

如果您专门针对使用Objective-C的macOS,那么是您最好的解决方案。 但是,如果需要iOS兼容性,则必须下拉至较低级别的C API,例如getifaddrs(...)

如果您想要一个基于的解决方案,甚至getifaddrs(...)都带有一些桥接头要求(使其无法在Framework中使用)。

这是一个使用CFHostsockaddr_in struct的示例,该sockaddr_in struct将在Swift以及macOS和iOS(甚至在Frameworks)中运行。 有关完整的示例,请参见Host.swift

  1. 使用CFHost获取寻址信息,这将是CFArrayCFData

     let sockaddrs = CFHostGetAddressing("apple.com", &resolved)?.takeRetainedValue() 
  2. 获取第一个对象

     let data = CFArrayGetValueAtIndex(sockaddrs, 0) 
  3. 将字节转换为sockaddr struct

     var storage = sockaddr_storage() data.getBytes(&storage, length: sizeof(sockaddr_storage)) 
  4. 然后将sockaddr struct强制为sockaddr_in struct以便我们可以使用它

     let addr = withUnsafePointer(&storage) { UnsafePointer<sockaddr_in>($0).memory 
  5. 使用inet_ntoa(...)函数将addr.sin_addr (IP地址)转换为C字符串。 然后,我们可以使用String(Cstring: encoding:)获得IP地址的漂亮String。

     let address = String(CString: inet_ntoa(addr.sin_addr), encoding: NSUTF8StringEncoding) 

这是我创建的一个名为Hostess.swift的GitHub项目,用于使用上述技术解决这些问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM