공부/이모저모

nc 로 특정 포트 UDP 패킷 계속 받기 (한번만 받고말기 X 계속 받기)

JUNFUTURE 2025. 1. 7. 20:15

-k 옵션은 netcat 명령어에서 사용되는 옵션으로, 서버가 클라이언트 연결을 종료한 후에도 계속해서 새 클라이언트 연결을 수락하도록 유지하는 기능을 제공합니다.

nc -u -l -k 3000

 

-k 옵션의 동작

  • 기본적으로 nc -l로 실행된 netcat은 하나의 연결(또는 패킷)만 처리한 후 종료됩니다.
  • -k 옵션을 추가하면 netcat이 계속 실행되며 새로운 연결이나 데이터를 기다립니다.

사용 예시

 
nc -u -l -k 3000 | tee logfile.log

이 명령은 다음과 같은 동작을 합니다:

  1. UDP 모드 (-u): UDP 프로토콜로 통신.
  2. Listen 모드 (-l): 지정된 포트(3000)에서 대기.
  3. Keep-alive 모드 (-k): 한 번의 데이터 수신 후 종료하지 않고 계속 대기.
  4. tee와 로그 저장: 수신한 데이터를 logfile.log에 저장하면서 동시에 화면에 출력.

동작 흐름

  • 클라이언트가 연결하거나 데이터를 전송하면, 서버는 데이터를 처리한 후 종료하지 않고 다음 데이터를 기다립니다.
  • 예를 들어, 클라이언트가 여러 번 데이터를 보낼 때 매번 새로운 패킷을 처리할 수 있습니다.

비교: -k 옵션 없이

 
nc -u -l 3000
  • 하나의 연결이나 패킷만 처리한 후, netcat이 종료됩니다.
  • 지속적으로 데이터나 연결을 처리하려면 수동으로 명령을 다시 실행해야 합니다.

-k 사용 시 장점

  • 여러 클라이언트나 반복적인 데이터 수신이 필요한 경우 편리.
  • 장시간 실행되는 서버 역할을 수행할 수 있음.

주의 사항

  • -k 옵션은 무한 대기를 의미하므로, 의도하지 않은 동작이나 불필요한 리소스 사용을 방지하려면 종료 조건을 적절히 설정해야 합니다. 예를 들어, 특정 신호(Ctrl+C 등)로 수동 종료하거나 백그라운드 프로세스로 실행할 수 있습니다.

by chatgpt