현재 내 모바일 단말과 연결된 네트워크의 IP 주소를 알아야 하는 경우가 있습니다. 블루투스, WIFI, Hotspot 어떤 네트워크든 Ping Test 를 통해서 현재 연결된 네트워크 IP 주소를 가져오는 방법을 정리하려고 합니다.        ...

[안드로이드] 연결된 네트워크 IP 주소 가져오기 (with Ping Test)

 


현재 내 모바일 단말과 연결된 네트워크의 IP 주소를 알아야 하는 경우가 있습니다.

블루투스, WIFI, Hotspot 어떤 네트워크든 Ping Test 를 통해서

현재 연결된 네트워크 IP 주소를 가져오는 방법을 정리하려고 합니다.

 

 

 

 

1. 권한 추가하기

Androidmanifest.xml 에 아래 권한을 추가합니다.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

 

 

 

2. My Ip Address 가져오기

가장 먼저 내 단말에서 사용 중인 IP Address 를 가져와야 합니다.

이때 사용 중인 네트워크가 WiFi, 블루투스 등등 2개 이상일 수 있기 때문에 List 로 반환합니다.

private fun getSiteLocalIpAddress(): ArrayList<String> {
val ipList = ArrayList<String>()
try {
val enumNetworkInterfaces = NetworkInterface.getNetworkInterfaces()
while (enumNetworkInterfaces.hasMoreElements()) {
val networkInterface = enumNetworkInterfaces.nextElement()
val enumInetAddress = networkInterface.inetAddresses
while (enumInetAddress.hasMoreElements()) {
val inetAddress = enumInetAddress.nextElement()
if (inetAddress.isSiteLocalAddress) {
ipList.add(inetAddress.hostAddress)
}
}
}
} catch (e: SocketException) {
e.printStackTrace()
}
return ipList
}

 

 

 

3. Connected Ip Address 가져오기

My IP Address 를 가져왔다면 해당 IP 주소에 대한 isReachable 을 활용하셔 Ping test 를 진행 할 수 있습니다.

private fun getConnectedIpWithPingTest(myIpAddress: String): ArrayList<InetAddress> {
val connectedIpList = ArrayList<InetAddress>()
try {
val myIpArray = myIpAddress.split(".")
for (lastIp in 0..255) {
val targetIpAddress = String.format("%s.%s.%s.%d", myIpArray[0], myIpArray[1], myIpArray[2], lastIp)
val targetIp = InetAddress.getByName(targetIpAddress)
if (targetIp.isReachable(100)) { // ping test timeout : 100ms
connectedIpList.add(targetIp)
}
}
} catch (e: Exception) {
e.printStackTrace()
}

return connectedIpList
}

 

 

 

4. Ping Test (MainActivity)

위에 메서드를 활용하여 연결된 네트워크 IP 주소를 가져올 수 있습니다.

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// My Ip List
val ipList = getSiteLocalIpAddress()

for (ip in ipList) {
// Ping Test (return connected Ip List)
val connectedIpList = getConnectedIpWithPingTest(ip)
for (connectedIp in connectedIpList) {
Log.d("Result", " # connectedIp ${connectedIp.hostName}")
}
}
}

 


 

 

 

0 comments: