2026/03/17

오늘의 이야기

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주소가 나오게 됩니다. 


 


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


 





댓글 없음:

댓글 쓰기

오늘의 이야기

Zxing 은 qrcode, barcode 인식을 위해서 공유되는 open source 라이브러리입니다.  오늘은 이것을 활용해서 QRCode 을 만들어서 앱에 공유 하는 이야기를 해 보고자 합니다.  이전 포스팅을 통해서 barcode 을 생성해 주...