투케이2K

388. (ios/swift5) [유틸 파일] getWifiIpAddress : 현재 연결 된 와이파이 (wifi) ip 주소 확인 - ifaddrs 본문

IOS

388. (ios/swift5) [유틸 파일] getWifiIpAddress : 현재 연결 된 와이파이 (wifi) ip 주소 확인 - ifaddrs

투케이2K 2023. 12. 13. 18:19

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT5

 

[소스 코드]

    // -----------------------------------------------------------------------------------------
    // MARK: - [현재 연결 된 와이파이 ip 주소 확인]
    // -----------------------------------------------------------------------------------------
    func getWifiIpAddress() -> String {
        
        /*
        // -----------------------------------------
        [getWifiIpAddress 메소드 설명]
        // -----------------------------------------
        1. 현재 연결 된 와이파이 ip 주소 확인
        // -----------------------------------------
        2. 호출 방법 :
         
         C_App().getWifiIpAddress()
        // -----------------------------------------
        4. 참고 설정 :
         
         swift 브릿지 헤더에 import 추가 필요 : #include<ifaddrs.h>
        // -----------------------------------------
        */

        
        // [변수 선언]
        var returnData = ""
        var M_LOG = ""
        
        
        // [로직 처리 실시]
        if C_StateCheck().isWifiConnected() == true { // [와이파이 연결 상태 확인]
            
            var ifaddr: UnsafeMutablePointer<ifaddrs>? = nil
            if getifaddrs(&ifaddr) == 0 {
                var ptr = ifaddr
                while ptr != nil {
                    defer { ptr = ptr?.pointee.ifa_next }

                    guard let interface = ptr?.pointee else { return "" }
                    let addrFamily = interface.ifa_addr.pointee.sa_family
                    if addrFamily == UInt8(AF_INET) || addrFamily == UInt8(AF_INET6) {

                        // wifi = ["en0"]
                        // wired = ["en2", "en3", "en4"]
                        // cellular = ["pdp_ip0","pdp_ip1","pdp_ip2","pdp_ip3"]

                        let name: String = String(cString: (interface.ifa_name))
                        if  name == "en0" || name == "en2" || name == "en3" || name == "en4" || name == "pdp_ip0" || name == "pdp_ip1" || name == "pdp_ip2" || name == "pdp_ip3" {
                            var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
                            getnameinfo(interface.ifa_addr, socklen_t((interface.ifa_addr.pointee.sa_len)), &hostname, socklen_t(hostname.count), nil, socklen_t(0), NI_NUMERICHOST)
                            returnData = String(cString: hostname)
                        }
                    }
                    else {
                        M_LOG = "[Error] :: AF_INET check error"
                    }
                }
                freeifaddrs(ifaddr)
                
                if returnData != "" && returnData.count > 0 {
                    M_LOG = "[Success] :: Wifi Get Ip Address"
                }
                else {
                    M_LOG = "[Error] :: returnData Is Null"
                }
            }
            else {
                M_LOG = "[Error] :: getifaddrs check error"
            }
            
        }
        else {
            M_LOG = "[Error] :: Device Wifi Not Connected"
        }
        
        
        // [로그 출력 수행]
        S_Log._D_(description: "현재 연결 된 와이파이 ip 주소 확인", data: [
            "M_LOG :: \(M_LOG)",
            "RETURN :: \(returnData)"
        ])
        
        
        // [리턴 반환 수행]
        return returnData
    }

[결과 출력]


 

반응형
Comments