Port 스캐너를 JAVA로 코딩해 보았습니다

 

Port 스캐너란

: 해당 IP의 열린 포트가 몇번이 있는지 다 찾아주는 기능을 합니다

( 아무곳이나 막 Port스캔을 사용하게되면 나의 공인 IP가 대상 사이트로 부터 차단될 수 있다 )

 

Main 코드

import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) throws Exception {
		
		Scanner input = new Scanner(System.in);
		
		int start = 1;						// 기본 포트 시작을 1로 세팅하는 변수
		int end = 0xffff;					// 기본 포트 종료를 FFFF로 세팅하는 변수
		
		String port_range = null;			// 스캔할 포트의 범위를 받는 변수
		String ip = null;					// 대상 IP를 받는 변수
		
		System.out.print("대상 ip 입력 : ");	
		ip = input.nextLine();				// 대상 IP를 입력 받아 변수에 넣는다
		
		System.out.print("포트 범위 입력 (ex:1-100): ");
		port_range = input.nextLine();		// 스캔할 포트의 범위를 입력 받아 변수에 넣는다
		
		// 예외처리
		try {
			// 활성화된 ip인지 확인하기위해 80번 포트로 확인해본다
			new Socket(ip, 80);
			
			// 입력 받은 포트의 범위를 "-" 기준으로 잘라서 배열에 넣는다
			String[] ports = port_range.split("-");
			
			// 입력 받은 포트의 범위가 없을 경우 if문에 들어오지 않는다
			if(!(ports[0].equals("")))
			{	
				// 입력 받은 포트 범위에 0번지를 start 변수에 덮어쓴다
				start = Integer.parseInt(ports[0]);
				// 입력 받은 포트 범위에 1번지를 end 변수에 덮어쓴다
				end = Integer.parseInt(ports[1]);
			}
			
		// IP를 잘못 입력했을 경우의 예외 처리	
		} catch (UnknownHostException e) {
			System.out.println("잘못된 ip 입력");
			return;
		// 모든 경우의 예외 처리
		} catch (Exception e) {
			System.out.println("잘못된 입력");
			return;
		}
		
		// 직접 만든 PortScan 클래스 객체 생성
		PortScan p = null;
		
		// 포트의 범위를 지정한 만큼 포트를 스캔해준다
		for (; start <= end; start++) {
			p = new PortScan(ip, start, 1);
			p.start();
		}
		// 과부하를 방지하기 위한 sleep
		Thread.sleep(10000);
	}
}

 

PortScan 클래스 코드

import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;

// 빠른 동작위해 쓰레드 사용
public class PortScan extends Thread {
	
	String ip = null;		// 대상 IP를 담아주는 변수	
	int port = 0;			// 포트 번호 하나를 담아주는 변수
	int timeout = 1000;		// 대기시간에 timeout을 걸어주는 변수
	
	// 생성자를 통해 메인으로 부터 값을 받아 세팅
	public PortScan(String ip, int port, int timeout){
		this.ip = ip;	
		this.port = port;
		this.timeout = timeout * this.timeout;
	}
	
	@Override
	public void run() {
		
		// Sooket 참조 변수
		Socket c = null;
		// SooketAddress를 통해 IP와 Port번호를 받아서 addr 변수에 저장한다
		SocketAddress addr = new InetSocketAddress(this.ip, this.port);
		
		// 예외처리
		try {
			
			//Sooket 객체 생성
			c = new Socket();
			// connect를 통해 addr에 저장된 IP와 PORT로 연결을  시도하고 timeout시간동안 대기한다
			c.connect(addr, this.timeout);
			// 위에서 연결에 성공하면 성공한 포트를 출력한다 실패하면 예외처리로 코드가 끝난다
			System.out.println("open: "+this.port);
			// Sooket를 닫아준다
			c.close();
		} catch (Exception e) {
			
		}	
	}
}

 

동작 캡쳐

 

- 대상 IP 입력란에 IP나 도메인 주소를 넣고 스캔할 포트 범위를 입력해준다

- 입력된 IP와 포트 범위를 대상으로 포트 스캔을 시작한다

'JAVA' 카테고리의 다른 글

IP 스캐너 코딩 (JAVA)  (0) 2020.11.13
생성자 (JAVA)  (0) 2020.11.13
프로세스 관리 코딩 ( JAVA )  (1) 2020.11.12
간단한 구구단 코딩 (JAVA)  (0) 2020.11.05

IP 스캔을 할 수 있는 코딩을 JAVA로 제작해 보았습니다

 

IP스캐너

: 나의 사설망이나 공인 IP 대역을 입력하여 주변 컴퓨터들이 사용하는 IP를 확인할 수 있다

 

IP스캐너를 코딩하기전  필요한 파일

1. icmp4j-all.jar

2. jna-3.2.5.jar

3. jna-platform-win32.jar

 

- 위 3개의 파일 다운 받아서 lib에 넣어줘야 합니다

 

Main 코드

import org.icmp4j.IcmpPingRequest;
import org.icmp4j.IcmpPingResponse;
import org.icmp4j.IcmpPingUtil;

public class Main {

	public static void main(String[] args) {
		
		// ICPM 패킷 생성 후 request 변수에 담기
	    IcmpPingRequest request = IcmpPingUtil.createIcmpPingRequest ();
	 
	    // IP대역인 1~255까지 검사하는 반복문
	    for (int count = 1; count < 255; count ++) {
	    	
	    	// request를 IP로 만들어 준다
	    	request.setHost ("192.168.1." + count);
	    	// iCMP 패킷을 request에 담긴 IP로 보낸다
	    	IcmpPingResponse response = IcmpPingUtil.executePingRequest (request);
	    	// ICMP 패킷을 받는다
	    	String formattedResponse = IcmpPingUtil.formatResponse (response);
	    	
	    	// 받은 내용을 소문자로 바꾼다
	    	formattedResponse = formattedResponse.toLowerCase();
	    	
	    	// 받은 내용에 reply가 포함되어 있지 않으면 indexof로 -1을 돌려주기 때문에 if문에 들어가지 않는다
	    	if(formattedResponse.indexOf("reply") != -1)
	    	{
	    		// 조건에 충족되는 IP를 출력하여 알려준다
	    		System.out.println ("192.168.1." + count);
	    	}
	    	
	    	// 너무 빨리 동작하는걸 방지하기 위해 sleep을 걸어준다
	    	try {
	    		Thread.sleep (1000);
	    	} catch (Exception e) {
	    		e.printStackTrace();
	    	}
	    }
	}
}

 

 

동작 결과

- 기본 게이트웨이로 설정된 1번과 제가 사용하는 4번만 스캐너에 의해 확인이됬습니다

'JAVA' 카테고리의 다른 글

Port 스캐너 (JAVA)  (0) 2020.11.13
생성자 (JAVA)  (0) 2020.11.13
프로세스 관리 코딩 ( JAVA )  (1) 2020.11.12
간단한 구구단 코딩 (JAVA)  (0) 2020.11.05

생성자란

: 생성자는 new 연산자를 통해서 인스턴스를 생서할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드이다

문법

public 클래스명 ([매개변수] ){
	[실행할 코드]
}

 

예시 Main 코드

public class main {
	public static void main(String[] args) {
		
		Constructor con1 = new Constructor();
		Constructor con2 = new Constructor("매개변수");	
	}
}

 

예시 클래스 코드

public class Constructor {
		
	public Constructor() {
	
		System.out.println("기본 생성자 호출");
	}
		
	public Constructor(String msg) {
		
		System.out.println(msg + "생성자 호출");
	}
	
}

 

- 예제 코드 결과

'JAVA' 카테고리의 다른 글

Port 스캐너 (JAVA)  (0) 2020.11.13
IP 스캐너 코딩 (JAVA)  (0) 2020.11.13
프로세스 관리 코딩 ( JAVA )  (1) 2020.11.12
간단한 구구단 코딩 (JAVA)  (0) 2020.11.05

프로세스를 관리하기 위한 코딩을 JAVA로 제작해 보았다

( 코드가 이상하게 tab이 맞지 않네요.. )

 

기능별로 함수로 구현

1. 프로세스 목록 보기

2. 프로세스 이름 조회

3. 프로세스 ID 조회

4. 프로세스 이름으로 종료

5. 프로세스 ID로 종료

 

동작

 

- 원하는 기능을 선택 받고 있다

 

- 1번을 입력해 조회를 했을 때 출력되는 모습이다

 

- 2번을 입력하고 프로세스 이름을 입력하면 프로세스명과 프로세스 ID를 출력해준다

 

- 3번을 입력하고 프로세스 ID를 입력해주면 프로세스 이름과 프로세스 ID를 출력해준다

 

- 4번을 입력하고 종료할 프로세스 이름을 입력해주면 성공적으로 종료된걸 확인할 수 있다

 

- 5번을 입력하고 종료할 프로세스 ID를 입력하면 성공적으로 종료된걸 확인할 수 있다

 

Main 페이지 코드

public static void main(String[] args) {
	
	Scanner input = new Scanner(System.in);
	
    int menu = 0;
	String find = null;					// switch문 내에서 문자열을 받을때 사용하는 변수
	
	Proc p = new Proc();				// 함수 호출 용도로 생성

	while(true)
	{
		System.out.println("=====프로세스 관리=====");
		System.out.println("1. 프로세스 목록");
		System.out.println("2. 프로세스 이름 검색");
		System.out.println("3. 프로세스 ID 검색");
		System.out.println("4. 프로세스 이름으로 종료");
		System.out.println("5. 프로세스 ID로 종료");
		
		System.out.print("번호 입력: ");
		menu = input.nextInt();			// menu변수에 숫자를 입력
		input.nextLine();				// 개행이 남아있기 때문에 비워주기 위한 용도
										
		switch (menu) {					// menu변수를 통해 해당하는 맞는 함수를 호출
		case 1:
			System.out.println("프로세스 목록");
			p.list_all();				// 프로세스 리스트 조회용 함수
			break;
			
		case 2:
			System.out.print("프로세스 이름 입력 : ");
			find = input.nextLine();
			p.img_find(find);			// 프로세스 이름으로 조회하는 함수
			break;
			
		case 3:
			System.out.print("프로세스 ID 입력 : ");
			find = input.nextLine();
			p.pid_find(find);			// 프로세스 ID로 조회하는 함수
			break;
			
		case 4:
			System.out.print("프로세스 이름 입력 : ");
			find = input.nextLine();
			p.img_kill(find);			// 프로세스 이름을 통해 종료하는 함수
			break;
			
		case 5:
			System.out.print("프로세스 ID 입력 : ");
			find = input.nextLine();
			p.pid_kill(find);			// 프로세스 ID를 통해 종료하는 함수
			break;
		default:
			break;
		}
	}
}

 

Proc 함수 코드

public class Proc {

	// 프로세스 리스트 조회 함수
	public void list_all() {

		ArrayList<String> list = new ArrayList<String>();
		
        // Arraylist에 조회하는 명령어를 옵션별로 잘라서 넣어준다
		list.add("TASKLIST");
		list.add("/SVC");
		list.add("/FO");
		list.add("CSV");

		String data = null;		// 명령어를 통해 나온 내용을 저장하는 변수
		
        // 예외처리
		try {
			// Process객체를 생성
            // 외부 프로그램을 실행시키는 ProcessBuilder에 list를 넣고 실행
			Process ps = new ProcessBuilder(list).start();
			
            // ps의 결과 값을 byte로 받아서 문자로 처리하게 해준다 
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader br = new BufferedReader(in);
			
            // cmd 창에서 조회를 했을 때 나오는 첫 번째 쓸모 없는 라인을 가져온다
			data = br.readLine();
			
            // 반복문을 통해 프로세스 리스트를 다 가져온다
			while (true) {
            
            	// 한번 더 읽어들여 처음 읽은걸 버린다
				data = br.readLine();
				
                // data에 내용이 없을 경우 반복문을 빠져나간다
				if (data == null) {
					break;
				}
                // \로 작성된 것을 공백으로 변환한다
				data = data.replaceAll("\"", "");
                // data 변수에 담긴 값에서 ','을 기준으로 잘라 0번지와 1번지를 가져오고 출력
				System.out.printf("%s\t%s\n", data.split(",")[0], data.split(",")[1]);
			}

		} catch (Exception e) {

			e.printStackTrace();

		}

	}
	
    // 프로세스 이름으로 조회하는 함수
	public void img_find(String dst) {

		ArrayList<String> list = new ArrayList<String>();
		
        // Arraylist에 조회하는 명령어를 옵션별로 잘라서 넣어준다
		list.add("TASKLIST");
		list.add("/SVC");
		list.add("/FO");
		list.add("CSV");

		String data = null;		// 명령어를 통해 나온 내용을 저장하는 변수
		String src = null;		// 프로세스 이름을 담을 변수
		
        // 예외처리
		try {
			// Process객체를 생성
            // 외부 프로그램을 실행시키는 ProcessBuilder에 list를 넣고 실행
			Process ps = new ProcessBuilder(list).start();

			 // ps의 결과 값을 byte로 받아서 문자로 처리하게 해준다 
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader br = new BufferedReader(in);

			 // cmd 창에서 조회를 했을 때 나오는 첫 번째 쓸모 없는 라인을 가져온다
			data = br.readLine();

			// 반복문을 통해 프로세스 리스트를 다 가져온다
			while (true) {
            	
                // 한번 더 읽어들여 처음 읽은걸 버린다
				data = br.readLine();
				
                // data에 내용이 없을 경우 반복문을 빠져나간다
				if (data == null) {
					break;
				}
                // \로 작성된 것을 공백으로 변환한다
				data = data.replaceAll("\"", "");
                
                // data 변수에 담긴 값에서 ','을 기준으로 잘라 0번지를 가져옴
				src = data.split(",")[0];
				
                // src값과 dst값이 같은지 비교한다
				if(src.equals(dst))
				{
                	// data 변수에 담긴 값에서 ','을 기준으로 잘라 0번지와 1번지를 가져오고 출력
					System.out.printf("%s\t%s\n", data.split(",")[0], data.split(",")[1]);	
				}
			}

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

	// 프로세스 ID로 조회하는 함수
	public void pid_find(String dst) {
		
		ArrayList<String> list = new ArrayList<String>();
        
		// Arraylist에 조회하는 명령어를 옵션별로 잘라서 넣어준다
		list.add("TASKLIST");
		list.add("/SVC");
		list.add("/FO");
		list.add("CSV");

		String data = null;		// 명령어를 통해 나온 내용을 저장하는 변수
		String src = null;		// 프로세스 이름을 담을 변수
		
        // 예외처리
		try {
			
            // Process객체를 생성
            // 외부 프로그램을 실행시키는 ProcessBuilder에 list를 넣고 실행
			Process ps = new ProcessBuilder(list).start();

			// ps의 결과 값을 byte로 받아서 문자로 처리하게 해준다 
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader br = new BufferedReader(in);

			 // cmd 창에서 조회를 했을 때 나오는 첫 번째 쓸모 없는 라인을 가져온다
			data = br.readLine();

			// 반복문을 통해 프로세스 리스트를 다 가져온다
			while (true) {
            
            	// 한번 더 읽어들여 처음 읽은걸 버린다
				data = br.readLine();
				
                // data에 내용이 없을 경우 반복문을 빠져나간다
				if (data == null) {
					break;
				}
                
                // \로 작성된 것을 공백으로 변환한다
				data = data.replaceAll("\"", "");
				
                // data 변수에 담긴 값에서 ','을 기준으로 잘라 1번지를 가져옴
                src = data.split(",")[1];
				
                // src값과 dst값이 같은지 비교한다
				if(src.equals(dst))
				{
                	// data 변수에 담긴 값에서 ','을 기준으로 잘라 0번지와 1번지를 가져오고 출력
					System.out.printf("%s\t%s\n", data.split(",")[0], data.split(",")[1]);	
				}
			}

		} catch (Exception e) {

			e.printStackTrace();

		}


	}
	
    // 프로세스 이름을 통해 종료하는 함수
	public void img_kill(String find) {
		
		ArrayList<String> list = new ArrayList<String>();
		
        // Arraylist에 프로세스 종료 명령어를 옵션별로 잘라서 넣어준다
		list.add("TASKKILL");
		list.add("/F");
		list.add("/IM");
		list.add(find);
		
        // 명령어를 통해 나온 내용을 저장하는 변수
		String data = null;
		
        //예외처리
		try {
        
			// Process객체를 생성
            // 외부 프로그램을 실행시키는 ProcessBuilder에 list를 넣고 실행
			Process ps = new ProcessBuilder(list).start();
			
            // ps의 결과 값을 byte로 받아서 문자로 처리하게 해준다 
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader br = new BufferedReader(in);

			// cmd 창에서 프로세스를 종료 했을 때 나오는 첫 번째 쓸모 없는 라인을 가져온다
			data = br.readLine();

			// data에 내용이 없으면 반복문에 들어가지 않는다
            // 프로세스 종료가 성공적으로 되었으면 종료시 나오는 메시지를
            // 반복문을 통해 전부 출력한다
			while (data != null) {
				System.out.println(data);
				data = br.readLine();
			}

		} catch (Exception e) {

			e.printStackTrace();

		}

	}
	
    // 프로세스 ID를 통해 종료하는 함수
	public void pid_kill(String find) {
		
		ArrayList<String> list = new ArrayList<String>();
        
		// Arraylist에 프로세스 종료 명령어를 옵션별로 잘라서 넣어준다
		list.add("TASKKILL");
		list.add("/F");
		list.add("/PID");
		list.add(find);

		// 명령어를 통해 나온 내용을 저장하는 변수
		String data = null;
		
        // 예외처리
		try {
			
            // Process객체를 생성
            // 외부 프로그램을 실행시키는 ProcessBuilder에 list를 넣고 실행
			Process ps = new ProcessBuilder(list).start();
			
            // ps의 결과 값을 byte로 받아서 문자로 처리하게 해준다
			InputStreamReader in = new InputStreamReader(ps.getInputStream());
			BufferedReader br = new BufferedReader(in);
			
            // cmd 창에서 프로세스를 종료 했을 때 나오는 첫 번째 쓸모 없는 라인을 가져온다
			data = br.readLine();
			
            // data에 내용이 없으면 반복문에 들어가지 않는다
            // 프로세스 종료가 성공적으로 되었으면 종료시 나오는 메시지를
            // 반복문을 통해 전부 출력한다
			while (data != null) {
				
				System.out.println(data);
				data = br.readLine();
			}

		} catch (Exception e) {

			e.printStackTrace();

		}

	}

}

'JAVA' 카테고리의 다른 글

Port 스캐너 (JAVA)  (0) 2020.11.13
IP 스캐너 코딩 (JAVA)  (0) 2020.11.13
생성자 (JAVA)  (0) 2020.11.13
간단한 구구단 코딩 (JAVA)  (0) 2020.11.05

간단한 구구단 코딩을 java로 제작해 보았습니다

 

출력할 구구단 수를 입력하면 1부터 9까지의 구구단이 출력됩니다

 

초록색 부분이 입력한 부분으로 6단이 출력된 것을 확인할 수 있습니다

package good;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		int num1 = 0;	// 출력할 단수를 입력 받을 변수
		
		System.out.println("#########구구단#########");
		System.out.print("출력할 구구단 수 입력: ");
		
		num1 = input.nextInt();
		
		for (int i = 1; i < 10; i++) {
			System.out.printf("%d * %d = %d \n", num1, i, num1*i);
		}
	}
}

'JAVA' 카테고리의 다른 글

Port 스캐너 (JAVA)  (0) 2020.11.13
IP 스캐너 코딩 (JAVA)  (0) 2020.11.13
생성자 (JAVA)  (0) 2020.11.13
프로세스 관리 코딩 ( JAVA )  (1) 2020.11.12

+ Recent posts