- Published on
Java에서 NetworkInterface를 이용하여 IP Address 가져오는 방법
- Authors
- Name
- Hyesung Lee
- GitHub
- @silentsoft
윈도우 머신 기준으로 cmd> ipconfig -all
을 수행하면 하나의 연결에 IPv4 Address가 여러 개 물려있는 경우가 간혹가다 있다.
Inet4Address.getLocalHost().getHostAddress()
위 코드는 IPv4 Address가 하나일 때 잘 동작하지만, 위에서 언급 한대로 IPv4 Address가 여러 개인 경우 비활성화된 IPv4 Address를 리턴하기도 한다.
이럴 때에는 NetworkInterface를 이용하여 아래와 같이 가져오면 된다.
public static String getHostAddress() {
InetAddress localAddress = getLocalAddress();
if (localAddress == null) {
try {
return Inet4Address.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
;
}
} else {
return localAddress.getHostAddress();
}
return "";
}
private static InetAddress getLocalAddress() {
try {
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
List<InterfaceAddress> interfaceAddresses = networkInterfaces.nextElement().getInterfaceAddresses();
for (InterfaceAddress interfaceAddress : interfaceAddresses) {
InetAddress address =interfaceAddress.getAddress();
if (address.isSiteLocalAddress()) {
return address;
}
}
}
} catch (Exception e) {
;
}
return null;
}
위 소스 코드 2번째 라인 localAddress가 null인 경우는 없거나 매우 드물겠지만 그래도 혹시나 해서 방어 로직으로 Inet4Address를 통해 가져오도록 했다.