Spoofing 01 - TCP Server 구현
2024. 11. 30. 22:25ㆍLinux*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 |
---|