[Java] 현재 시스템의 IPv4기반의 IP주소 가져오기

Java에서 IP주소를 가져오는 방법은 매우 쉽고 간단합니다. 일반적으로 사용되는 간단한 방법으로는 다음과 같은 방법이 있습니다.
[code]InetAddress.getLocalHost().getAddress()[/code]
위의 단 한줄로 현재 시스템의 IP를 읽어올 수 있습니다. 그런데 개발시에는 문제가 없었는데 리눅스 서버에서 구동해 보니 127.0.0.1과 같이 loopback 주소가 나오는 경우가 있더군요. 찾아보다 다음과 같은 방법으로 깔끔하게 해결할 수 있었습니다.
[code]/**
 * 현재 서버의 IP 주소를 가져옵니다.
 *
 * @return IP 주소
 */
private String getLocalServerIp()
{
try
{
   for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();)
   {
       NetworkInterface intf = en.nextElement();
       for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();)
       {
           InetAddress inetAddress = enumIpAddr.nextElement();
           if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress())
           {
            return inetAddress.getHostAddress().toString();
           }
       }
   }
}
catch (SocketException ex) {}
return null;
}[/code]
현재 시스템의 모든 네트워크 인터페이스를 읽어와서 loopback장치인지 랜선에 연결된 장치인지 여부를 확인하여 실제 사용중인 인터페이스의 IP주소를 읽어오게 됩니다. 위와 같이 사용해서 실무에 적용해본 결과 어느 OS, 장치에 상관없이 IP가 정상적으로 출력되는것을 확인하였습니다.

소스코드가 좀 길고 더럽네요; 그냥 보관용으로 적어두는데 의미를 부여하겠습니다;;

  • cjoo

    고마워요^^

  • 감사합니다~ 포스트 내용 참고했습니다.

  • 변두리개발자

    감사합니다 잘쓸께요~ ㅎㅎ

  • Oh Chang Kwon

    저기 그런데 내가 실제 인터넷할때 연결되는 IP는 어떤건지 파악할 수 없나요?