UDP Server, Client

Kevin·2024년 5월 4일
0

Network

목록 보기
9/15
post-thumbnail

🧐 서론

UDP 프로토콜을 이용해 특정 서버로 요청을 보내야 하는 일이 있었다.

이 일인 즉슨, 최근에 특정 IP에서 우리 서버로 UDP 요청을 지속적으로 보내는 일이 많아져서, tcpdump를 이용해서 해당 요청을 분석하고자 하였다.

그래서 UDP 요청을 특정 서버의 IP로 보내는 클라이언트 side 코드와 클라이언트로부터 UDP 요청을 받아 처리하는 서버 side 코드를 작성하였다.

코드는 Python으로 작성 되었으며, Socket을 통해 서버와 클라이언트간 UDP 통신을 하였다.


😌 본론

UDP_CLIENT

# -*- coding: utf-8 -*-
import socket
import time

def main():
    # 서버 주소와 포트 설정
    SERVER_HOST = '특정 IP'  # 서버의 IP 주소 또는 호스트 이름으로 변경해주세요
    SERVER_PORT = 1234  # 서버가 수신 대기 중인 포트 번호

    # 5초마다 전송할 메시지 리스트
    messages = [
        "첫 번째 메시지입니다.",
        "두 번째 메시지입니다.",
        "세 번째 메시지입니다."
        # 필요한 만큼 메시지를 추가할 수 있습니다.
    ]

    # UDP 소켓 생성
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as client_socket:
        while True:
            # 메시지 리스트를 순회하면서 서버로 메시지 전송
            for message in messages:
                # 서버로 메시지 전송
                client_socket.sendto(message.encode(), (SERVER_HOST, SERVER_PORT))
                print(f'서버로 메시지를 전송했습니다: {message}')
                
                # 5초 대기
                time.sleep(5)

if __name__ == "__main__":
    main()

위 코드는 클라이언트 측 코드이며, 서버로 5초에 한번씩 메시지 리스트에 있는 내용을 전송한다.

  • 메시지 리스트를 제하고, 사용자로부터 메시지를 입력 받는다면 채팅 프로그램으로도 구현을 할 수 있을 것이다.

또한 메시지 전송시마다 print 문으로 서버로 전송된 메시지를 출력해준다.

아래 변수는 각자 상황에 맞게 기입하면 된다.

  • SERVER_HOST : UDP 요청을 보낼 서버 IP
  • SERVER_PORT : 위 서버 IP의 UDP Socket Port

UDP_SERVER

# -*- coding: utf-8 -*-
import socket

def main():
    # 호스트와 포트 설정
    HOST = '0.0.0.0'  # 모든 네트워크 인터페이스에서 수신
    PORT = 1234  # 사용할 포트 번호

    # UDP 소켓 생성
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as server_socket:
        # 소켓에 주소와 포트 바인딩
        server_socket.bind((HOST, PORT))
        print(f'UDP 서버가 {PORT} 포트에서 실행 중입니다...')

        # 클라이언트로부터 데이터 수신 및 출력
        while True:
            data, addr = server_socket.recvfrom(1024)  # 1024바이트까지의 데이터를 수신
            print(f'클라이언트로부터 수신한 데이터: {data.decode()}')

if __name__ == "__main__":
    main()

변수를 통해 모든 네트워크 인터페이스에서 클라이언트가 요청을 보낼 수 있게 설정을 하였으며, 1234번 Port로 Socket을 열었다.

클라이언트가 데이터를 송신하고, 서버가 이를 수신하면 print 문을 통해서 터미널로 출력해준다.

아래 변수는 각자 상황에 맞게 기입하면 된다.

  • HOST : 요청을 받을 네트워크 인터페이스 설정
  • PORT : Socket을 열 Port
profile
Hello, World! \n

0개의 댓글