Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

안드로이드 앱 만들기 : NetworkInterface Local IP 얻어 오기. (kotlin 버전)

Billcorea 2023. 3. 7. 15:30
반응형
Local IP

오늘은 앱을 구현하는 동안에 필요했던 network interface을 통해서 Local IP을 얻어오는 코드에 대한 기술을 해 볼까 합니다. 

 

@Throws(SocketException::class)
fun getLocalIpAddress(): String {

    //Device에 있는 모든 네트워크에 대해 뺑뺑이를 돕니다.
    val en = NetworkInterface.getNetworkInterfaces()
    while (en.hasMoreElements()) {
        val intf = en.nextElement()

        //네트워크 중에서 IP가 할당된 넘들에 대해서 뺑뺑이를 한 번 더 돕니다.
        val enumIpAddr = intf.inetAddresses
        while (enumIpAddr.hasMoreElements()) {
            val inetAddress = enumIpAddr.nextElement()

            //네트워크에는 항상 Localhost 즉, 루프백(LoopBack)주소가 있으며, 우리가 원하는 것이 아닙니다.
            //IP는 IPv6와 IPv4가 있습니다.
            //IPv6의 형태 : fe80::64b9::c8dd:7003
            //IPv4의 형태 : 123.234.123.123
            //어떻게 나오는지는 찍어보세요.
            if (inetAddress.isLoopbackAddress) {
                Log.e("IPAddress", "ip=" + intf.displayName + "(loopback) | " + inetAddress.hostAddress)
            } else {
                Log.e("IPAddress", "ip=" + intf.displayName + " | " + inetAddress.hostAddress)
            }
            if (!inetAddress.isLoopbackAddress && inetAddress is Inet4Address) {
                Log.e("", "")
                return inetAddress.getHostAddress().toString()
            }
        }
    }
    return ""
}

물론 코드는 kotlin 코드 입니다. 구글링을 많이 해 보아도 java로 되어 있는 코드들은 많은데, kotlin 으로 되어 있는 코드는 잘 찾기가 힘이 듭니다. 해서 이번에 찾은 코드를 기록해 두려고 합니다.  그래야 나중에 또 사용할 일이 생길 수 있으니까요

 

우리가 찾는 IP 주소는 IPv4, IPv6 등등이 있을 수 있습니다.  IPv6은 이제 너무 많아서 포화 상태가 되어가는 IPv4의 확장판이라고 보면 될 것 같습니다. 아직 까지는 IPv4로 지칭 되는 192.168.0.1 형식의 IP주소가 나오게 됩니다. 

 

실행된 모습은 직접 만들어서 확인해 보시면 좋을 듯 합니다.   그래야 또 하나 배움의 길로 들어설 테니 말입니다.

 

반응형