簡體   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