JSP에서 클라이언트의 IP 주소를 확인하기 위해 다음과 같이 할 수 있다.

<%
out.print("<p>Remote Addr: " + request.getRemoteAddr() + "</p>");
out.print("<p>Remote Host: " + request.getRemoteHost() + "</p>");
out.print("<p>X-Forwarded-For: " + request.getHeader("x-forwarded-for") + "</p>");
%>

getRemoteAddr()이나 getRemoteHost()나 같은 값을 돌려준다.

x-forwarded-for는 클라이언트가 프록시 (Proxy) 뒤에 있을 경우 실제 IP 주소를 알기 위한 용도로 사용할 수 있다.

다음은 이를 테스트하는 페이지이다.

http://cushion.flxsrv.biz/services/identify_ip.jsp

자신의 Public IP 주소를 확인하고자 할 때 유용하겠다.


출처 - http://devday.tistory.com/entry/JSP%EC%97%90%EC%84%9C-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-Client-IP-%EC%A3%BC%EC%86%8C-Address-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0


==================================================================================


이번 개발에 있어서 윈도우 이클립스에서 개발한 서버가 리눅스 환경에서 일부 기능에 문제가 있어서 찾다보니 같은 메소드지만 윈도우 환경에서 로컬 ip주소를 얻어오는 코드가 리눅스에서는 "127.0.0.1"을 가져와서 문제가 되었다. 구글에서 검색한 결과 코드가 좀 길고 지저분하지만 아래 코드를 써줘야 했다.

* Windows
 try {

System.out.println(InetAddress.getLocalHost().getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}

 

* Linux
try {
String ip = null;

boolean isLoopBack = true;
Enumeration<NetworkInterface> en;
en = NetworkInterface.getNetworkInterfaces();

while(en.hasMoreElements()) {
NetworkInterface ni = en.nextElement();
if (ni.isLoopback())
continue;

Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
while(inetAddresses.hasMoreElements()) { 
InetAddress ia = inetAddresses.nextElement();
if (ia.getHostAddress() != null && ia.getHostAddress().indexOf(".") != -1) {
ip = ia.getHostAddress();
System.out.println(ip);
isLoopBack = false;
break;
}
}
if (!isLoopBack)
break;
}
System.out.println(" IP  =   " + ip);
} catch (SocketException e) {
e.printStackTrace();
}


출처 - http://atin.tistory.com/341


===================================================================================


import java.net.*;

 

 

InetAddress Address = InetAddress.getLocalHost();


System.out.println("로컬 컴퓨터의 이름 : "+Address.getHostName());


System.out.println("로컬 컴퓨터의 IP 주소 : "+Address.getHostAddress());


Address = InetAddress.getByName("java.sun.com");


System.out.println("java.sun.com 컴퓨터의 이름과 IP 주소 : "+Address);


InetAddress SW[] = InetAddress.getAllByName("www.hollywood.com");


for (int i=0; i System.out.println(SW[i]);


출처 - http://blog.naver.com/PostView.nhn?blogId=aegisfight&logNo=100030866626


===================================================================================


Java에서 Localhost의 IP를 확인방법은 java.net package의 InetAddress 클래스를 이용하는
것이 일반적이다. 그러나 Window와는 달리 UNIX/LINUX에서는 문제가 발생할 소지가 있다.
InetAddress 는 기본적으로 Hostname로 IP Address를 가지고 오는 방법을 취하고 있는데
UNIX의 경우는 내부적으로 SecurityManager.checkConnect()의 호출에서 Exception발생시
Loopback Address를 리턴하게 되어 실제 Localhost의 IP를 얻어오지 못하는 경우가 발생한다.

이런 문제 때문에 java 1.4에서 새로 생긴 java.net package의 NetworkInterface 클래스를 이용하여
IP를 가지고 오는 방법을 취한다.
그러나 또다른 문제가 발생된다. NetworkInterface은 Ethernet 장치기반으로 IP를 Enumeration으로
반환하기 때문에 여러개의 Ethernet 장치가 존재할 경우에는 원하는 IP를 선택하여야 할 상황이
생기게 된다.

자! 그래서 소스
public static void main(String args[]) throws SocketException{
Enumeration<NetworkInterface> nienum = NetworkInterface.getNetworkInterfaces();
        while (nienum.hasMoreElements()) {
            NetworkInterface ni = nienum.nextElement();
            Enumeration<InetAddress> kk = ni.getInetAddresses();
            
            while (kk.hasMoreElements()) {
     InetAddress inetAddress = (InetAddress) kk.nextElement();
     System.out.println(inetAddress.getHostName()+" : "+inetAddress.getHostAddress());
     }
        }
        
}


출처 - http://suein1209.tistory.com/568




Posted by linuxism
,