개인참고자료/자바(네트워크)

InetAddress 클래스를 활용한 도메인과 IP 변환(nslookup 구현)

경진 2008. 7. 17. 11:07
윈도우나 유닉스 운영체제에서는 도메인 주소를 IP 주소를 구하거나 반대로 IP 주소를 이용해서 도메인 주소를 알아내는 프로그램을 제공한다. 해당 프로그램의 이름은 nslookup이다.
실행된 결과는 원래 www.yahoo.com에 대응되는 IP를 여러 개가 나와야 하나 주소창 뒤에 .local이 붙어 하나만 출력되었다. 실제로는 대응되는 IP가 여러 개이다. getAllByName() 메소드의 수행 결과가 배열로 나오는 것은 IP가 여러 개가 존재할 수 있기 때문이다.

nslookup실행결과

nslookup 실행 결과


InetAddress 클래스를 이용한 nslookup 명령 구현

InetAddress는 IP나 도메인을 이용해서 여러 가지 유용한 정보를 얻을 수 있는 클래스이다.

nslookup 명령을 구현하고 실행하기 위한 순서

1. InetAddress 객체를 이용한 NSLookup 애플리케이션을 작성한다.
2. NSLookup 애플리케이션을 컴파일한다.
3. 도메인 주소를 인자로 지정해서 실행한다.
4. IP 주소를 인자로 지정해서 실행한다.

import java.net.*;            
          
public class NSLookup {            
           
    public static void main(String[] args) {       
        if(args.length != 1){   
            System.out.println("IP주소나 도메인 주소를 인자로 지정하세요.");
            System.exit(0);
        }   
        InetAddress inetaddr[] = null;   
        try {   
            inetaddr = InetAddress.getAllByName(args[0]);
        } catch (UnknownHostException e) {   
            e.printStackTrace();
        }   
        for(int i = 0; i < inetaddr.length; i++){   
            System.out.println(inetaddr[i].getHostName());
            System.out.println(inetaddr[i].getHostAddress());
            System.out.println(inetaddr[i].toString());
            System.out.println("------------------------");
        }
    }
}           

외부로부터 전달 받은 도메인명이나 IP 주소를 InetAddress에 있는 getAllByName 메소드에 전달하면, InetAddress[]가 반환된다. 그리고 하나의 도메인은 IP 정보에 여러 개를 가질 수 있기 때문에 배열 형태로 반환한다. 만약, 찾을 수 없는 도메인명이거나 잘못된 형식의 IP 주소라면 UnknownHostException이 발생한다.

        try {   
            inetaddr = InetAddress.getAllByName(args[0]);
        } catch (UnknownHostException e) {   
            e.printStackTrace();
        }  

InetAddress의 배열을 구현했다면 아래와 같이 배열의 크기만큼 반복하면서 도메인명(getHostName() 이용), IP 주소(getHostAddress() 이용), 도메인 정보(toString())를 구할 수 있다.

        for(int i = 0; i < inetaddr.length; i++){   
            System.out.println(inetaddr[i].getHostName());
            System.out.println(inetaddr[i].getHostAddress());
            System.out.println(inetaddr[i].toString());
            System.out.println("------------------------");
        }

실행결과

실행 결과

InetAddress 클래스를 이용한 로컬 컴퓨터명과 IP구하기

로컬 컴퓨터명과 IP 주소를 구해본다. InetAddress 클래스를 이용해서 구할 수 있다.

1. InetAddress를 이용해서 애플리케이션 소스를 작성한다.
2. 소스를 컴파일한다.
3. 실행한다.

import java.net.*;            
           
public class NSLookupLocal {            
           
    public static void main(String[] args) {       
        InetAddress inetaddr = null;   
        try {   
            inetaddr = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {   
            e.printStackTrace();
        }   
        System.out.println(inetaddr.getHostName());   
        System.out.println(inetaddr.getHostAddress());   
        System.out.println("byte[] 형식의 ip 주소 값의 출력.");   
        byte[] ip = inetaddr.getAddress();   
        for(int i = 0; i < ip.length; i++){   
            System.out.print((int)ip[i]);   
            if(i != ip.length -1)   
                System.out.print(".");
        }       
    }           
}               

현재 컴퓨터(Local)의 IP에 관련된 정보를 구하기 위해서 InetAddress 클래스에 있는 getLocalHost() 메소드를 사용했다.

        try {   
            inetaddr = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {   
            e.printStackTrace();
        }   

바이트 배열 형식의 값을 for 문을 이용해서 출력한다. (숫자와 숫자 사이에 점을 출력하게 했다)

        byte[] ip = inetaddr.getAddress();   
        for(int i = 0; i < ip.length; i++){   
            System.out.print((int)ip[i]);   
            if(i != ip.length -1)   
                System.out.print(".");
        }  

실행결과

실행 결과

'개인참고자료 > 자바(네트워크)' 카테고리의 다른 글

TCP 프로그래밍 - 간단한 에코 클라이언트/서버 프로래밍  (0) 2008.07.17
TCP 프로그래밍  (0) 2008.07.17
InetAddress 클래스  (0) 2008.07.17
소켓  (0) 2008.07.17
객체 스트림 - 예외  (0) 2008.07.17