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주소가 나오게 됩니다.
실행된 모습은 직접 만들어서 확인해 보시면 좋을 듯 합니다. 그래야 또 하나 배움의 길로 들어설 테니 말입니다.
댓글 없음:
댓글 쓰기