[네트워크 보안] 1. 파이썬(client) → Netcat(server) 패킷 송수신 실습

김나정·2024년 9월 3일

네트워크보안

목록 보기
1/7
post-thumbnail

클라이언트 프로그램 : 파이썬
서버 프로그램 : nc유틸리티 (Ubuntu)

클라이언트 프로그램

서버 프로그램


클라이언트 프로그램 코드 설명

import socket...①

data = b"Hello, Server\n"...②
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)...③
udp.sendto(data, ("192.168.186.255", 9090))...

①- Python의 socket 모듈을 가져옵니다. 이 모듈은 네트워크 통신을 위해 소켓을 생성하고 조작하는 기능을 제공합니다.

②- data 변수에 전송할 데이터를 바이트 문자열(b"...") 형식으로 저장합니다. UDP는 문자열 대신 바이트 데이터를 전송하므로 바이트 문자열로 변환이 필요합니다.

③- UDP 소켓을 생성합니다.
socket.AF_INET은 IPv4 주소 체계를 사용하겠다는 의미입니다.
socket.SOCK_DGRAM은 UDP 소켓을 생성하겠다는 의미입니다.

④- UDP 소켓을 통해 데이터를 특정 서버로 전송합니다.
data는 전송할 바이트 데이터입니다.
("192.168.186.255", 9090)은 데이터를 전송할 대상의 IP 주소와 포트 번호입니다. 여기서는 IP 주소 192.168.186.255와 포트 번호 9090으로 데이터를 전송합니다.

명령어를 실행한 결과로 나타난 "14"는 udp.sendto함수의 반환값으로 전송한 데이터의 바이트 수를 의미한다.


서버 프로그램 코드 설명

$ nc -lnuv 9090

-l: Netcat이 서버 모드로 동작하도록 설정합니다. 즉, 지정한 포트에서 들어오는 연결을 대기합니다.

-n: DNS 이름 조회를 하지 않도록 합니다. IP 주소만 사용합니다.

-u: UDP 프로토콜을 사용합니다. (기본은 TCP)

-v: verbose 모드로, 실행 중에 자세한 정보를 출력합니다.

명령어를 실행한 결과로 나타난 메시지 'Bound on 0.0.0.0 9090'은 서버 프로그램이 정상적으로 실행되었음을 의미한다. Netcat이 모든 네트워크 인터페이스(0.0.0.0)의 포트 9090에서 들어오는 UDP 패킷을 대기 중이라는 뜻


참고

  • 우분투에서 서버프로그램을 실행시킨 IP주소 확인하는 명령어
    =>출력 결과에서 inet으로 시작하는 줄을 찾으면 됨
ip addr show
  • 파이썬 코드에서는 192.168.186.255라고 작성하고 클라이언트 프로그램을 실행시켰는데 서버 프로그램 수신 출력에서는 dfdsdfConnection received on 192.168.186.1 59388
    Hello, Server 이렇게 192.168.186.1로 나왔다 왜 이런걸까?
    =>이 현상은 네트워크 브로드캐스트 주소(192.168.186.255)를 사용했기 때문에 발생한 것이다.
  1. 브로드캐스트 주소란?
    192.168.186.255와 같은 주소는 브로드캐스트 주소로, 이 주소로 전송된 패킷은 동일한 네트워크 내의 모든 호스트가 수신할 수 있다.

  2. 수신된 패킷의 출발지 IP 주소
    UDP 패킷을 수신하는 서버는 해당 패킷을 어디서부터 수신했는지 기록한다. 브로드캐스트 주소로 패킷을 보냈을 때, 서버는 이 패킷을 보낸 실제 출발지 IP 주소를 기록하게 된다. 따라서, 서버가 기록하는 IP 주소는 클라이언트 장치의 실제 IP 주소이다.

정리:
클라이언트의 실제 IP 주소가 192.168.186.1이고, 브로드캐스트 주소 192.168.186.255로 메시지를 보냈다면, 서버는 이 메시지가 192.168.186.1에서 왔다고 인식

  1. 서버의 출력 내용
    서버가 "Connection received on 192.168.186.1 59388"이라고 출력한 것은 다음을 의미: 메시지가 192.168.186.1 IP 주소를 가진 클라이언트 장치에서 보내졌고, 이 장치의 임시 포트 번호 59388을 사용했다는 뜻.
profile
molbwa

0개의 댓글