( 아무곳이나 막 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) {
}
}
}
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();
}
}
}
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);
}
}
}