Spoofing 01 - TCP Server 구현

2024. 11. 30. 22:25Linux*security/보안

반응형

다운로드

 

 

 

주파수 확인

 

 

송수신 주소 맥주소를 알수 있음

 

 

 

 


TCP/IP 소켓 통신을 활용한 서버 프로그램

 

package main;

import java.io.BufferedReader; // 클라이언트로부터 메시지를 읽기 위한 클래스
import java.io.InputStreamReader; // 입력 스트림을 처리하기 위한 클래스
import java.net.ServerSocket; // 서버 소켓을 생성하여 클라이언트의 연결을 기다리기 위한 클래스
import java.net.Socket; // 클라이언트와의 연결을 관리하는 클래스

public class Server {
	
	private BufferedReader reader; // 보낸 메시지를 읽어오는 reader 객체
	private ServerSocket server = null; // 서버 소켓 객체 (단자 역할)
	private Socket socket; // 클라이언트와 연결된 소켓 객체
	
	// 서버를 시작하는 메서드
	public void start() {
		try {
			// 서버 소켓을 12345번 포트로 생성하여 바인딩
			server = new ServerSocket(1235);
			System.out.println("서버가 활성화되었습니다."); // 서버 활성화 메시지 출력

			// 서버가 계속해서 클라이언트의 연결을 기다림
			while (true) {
				// 클라이언트가 연결할 때까지 대기
				socket = server.accept(); // 연결된 클라이언트 소켓을 반환
				// 클라이언트 소켓으로부터 입력 스트림을 받아서 reader에 할당
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

				// 클라이언트로부터 메시지를 읽는 메서드 호출
				getMessage();
			}			
		} catch (Exception e) {
			e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
		} finally {
			try {
				// 리소스를 정리하는 코드 (finally 블록은 예외가 발생하든 안 하든 항상 실행됨)
				if (reader != null) {
					reader.close(); // reader 닫기
				}
				if (socket != null) {
					socket.close(); // 소켓 닫기
				}
				if (server != null) {
					server.close(); // 서버 소켓 닫기
				}
			} catch (Exception e) {
				e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
			}
		}
	}
	
	// 클라이언트로부터 메시지를 계속해서 읽어오는 메서드
	public void getMessage() {
		try {
			// 무한 루프를 통해 클라이언트로부터 메시지를 계속 받음
			while (true) {
				// 클라이언트로부터 메시지를 읽어와서 출력
				System.out.println("클라이언트:"+reader.readLine());
			}
		} catch (Exception e) {
			e.printStackTrace(); // 예외 발생 시 스택 트레이스 출력
		}
	}

	// 메인 메서드 (현재는 아무런 동작도 하지 않음)
	public static void main(String[] args) {
		// 서버 객체를 생성하고, 서버를 시작하는 메서드를 호출해야 하는데 현재는 구현되지 않음
		// Server server = new Server();
		// server.start();
	}
}

1: 서버 소켓 생성 및 클라이언트 연결 수락

  • ServerSocket 클래스를 이용해 특정 포트(1235)에서 클라이언트의 연결을 대기.
  • accept() 메서드를 호출하여 클라이언트의 연결 요청을 수락.

 2: 클라이언트로부터 메시지 수신

  • 연결된 Socket의 입력 스트림(InputStream)을 BufferedReader로 감싸 데이터를 읽음.
  • readLine() 메서드를 통해 클라이언트가 보낸 메시지를 한 줄 단위로 읽고 콘솔에 출력.

3: 무한 루프를 통한 지속적인 통신

  • while (true) 루프를 사용해 클라이언트와 지속적으로 데이터를 주고받을 수 있도록 설계.

4: 리소스 관리

  • 서버 종료 또는 예외 발생 시 reader, socket, server를 닫아 리소스 누수를 방지.

 

 

 

 

 

 

 


작은 제목 1: 클라이언트 소켓 생성 및 서버 연결

  • Socket 클래스를 사용하여 127.0.0.1(localhost)의 포트 1235로 서버에 연결.
  • 연결 성공 시 "서버 접속 완료" 메시지를 출력.

작은 제목 2: 서버로 메시지 전송

  • 연결된 소켓의 출력 스트림을 PrintWriter로 감싸 데이터를 전송.
  • Scanner를 통해 사용자 입력을 받아 서버로 메시지를 지속적으로 전송.

작은 제목 3: 무한 루프를 통한 지속적인 데이터 전송

  • while (true) 루프를 사용하여 사용자 입력을 계속 읽고 서버에 전달.
  • 클라이언트와 서버 간 실시간 통신을 구현.

작은 제목 4: 예외 처리

  • 연결 실패 또는 통신 오류 시 스택 트레이스를 출력하여 문제를 디버깅.

 

 

 

 

 

 
 
 

 

 

반응형

'Linux*security > 보안' 카테고리의 다른 글

암호화 방식의 분류 블록암호  (1) 2024.12.12