[英]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在swift和Objective-c , ios和mac-os-x中具有不同程度的可見性。
如果您專門針對使用Objective-C的macOS,那么nshost是您最好的解決方案。 但是,如果需要iOS兼容性,則必須下拉至較低級別的C API,例如getifaddrs(...)
或cfhost 。
如果您想要一個基於快速的解決方案,甚至getifaddrs(...)
都帶有一些橋接頭要求(使其無法在Framework中使用)。
這是一個使用CFHost
和sockaddr_in struct
的示例,該sockaddr_in struct
將在Swift以及macOS和iOS(甚至在Frameworks)中運行。 有關完整的示例,請參見Host.swift 。
使用CFHost
獲取尋址信息,這將是CFArray
的CFData
。
let sockaddrs = CFHostGetAddressing("apple.com", &resolved)?.takeRetainedValue()
獲取第一個對象
let data = CFArrayGetValueAtIndex(sockaddrs, 0)
將字節轉換為sockaddr struct
var storage = sockaddr_storage() data.getBytes(&storage, length: sizeof(sockaddr_storage))
然后將sockaddr struct
強制為sockaddr_in struct
以便我們可以使用它
let addr = withUnsafePointer(&storage) { UnsafePointer<sockaddr_in>($0).memory
使用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.