Java로 IP 가져오기

일반적으로 IP를 가져오고자 할 때 InetAddress class의 static 함수를 사용해서 아래와 같이 호출하는 것 같다.

InetAddress.getLocalHost().getHostAddress();

하지만 여러가지 Network Interface가 붙어있는 machine인 경우 엉뚱한 IP가 리턴되는 경우가 있다.

나의 경우엔 loopback address만 나오는 상황이 있었는데 당연히 그 주소를 그대로 사용할 수는 없었다.

이런 경우 NetworkInterface class를 사용해서 Network Interface 별로 모두 주소를 가져와 확인하는게 가장 확실한 방법이 될 것 같다. 아래처럼 호출하면 Enumeration 으로 모든 Network Interface를 얻을 수 있고 그걸 기반으로 InetAddress를 얻어와 주소가 loopback address인지 등을 비교하면 정확한 주소를 얻을 수 있다.

NetworkInterface.getNetworkInterfaces();

나의 경우엔 loopback address가 아니고 site local address인 경우만 맞는 것으로 판단해서 사용했다.