首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 獲取 WiFi 路由器/網關 IP 地址:SystemConfiguration 框架實現

     編輯:程式設計綜合問答

iOS 沙箱限制無法直接讀取 `/etc/resolv.conf` 或 `arp -a`,需用 SystemConfiguration.framework 中的 SCNetworkReachability 獲取網關。

核心代碼

#import <SystemConfiguration/SystemConfiguration.h>

- (NSString *)gatewayIP {
    // 獲取默認路由 (0.0.0.0) 的網關
    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, "0.0.0.0");
    SCNetworkReachabilityFlags flags;
    BOOL gotFlags = SCNetworkReachabilityGetFlags(reachability, &flags);
    CFRelease(reachability);
    
    if (!gotFlags) return nil;
    
    // 解析 flags 中的 kSCNetworkReachabilityFlagsIsWWAN 等不直接給 IP
    // 實際需讀取系統路由表:使用 getifaddrs + net/route.h (私有 API 風險大)
    
    // 穩健方案:連接已知外網 IP (如 8.8.8.8),獲取本地綁定的源 IP,即為出口網關側 IP
    // 但無法直接拿到路由器 LAN 口 IP (如 192.168.1.1)
    return nil;
}

現狀限制

  • App Store 合規 App **無法直接獲取路由器 LAN IP**。
  • 企業內部分發/越獄設備可讀取 /var/preferences/SystemConfiguration/com.apple.wifi.plist (Key: `LastKnownGateway`)。
  • 替代方案:讓用戶手動輸入、或掃描二維碼配置、或通過本地 HTTP 服務(路由器管理頁)解析。

參考資源

CSDN 完整討論:iOS 獲取 WiFi 路由器地址

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved