네트워크_07 간이 TCP 서버 띄우기

 
  • 출처 : 유닉스 리눅스 쉘스크립트 예제사전_한빛미디어

명령어: nc
키워드: 네트워크, 포트 번호, 방화벽, 확인, 데몬
사용처: 시스템 구축 시 미들웨어 등을 아직 설치하지 않은 서버와 네트워크 개통을 확인하고 싶을 때

실행 예제

$ ./port-httpd.sh
Connection from 192.168.2.5 port 8080 [tcp/webcache] accepted   <-- 실행한 상태에서 다른 서버에서 nc 명령어로 패킷을 보냄

스크립트

#!/bin/sh

port=8080
nc -v -k -l $port # ----- 1

   

해설

서버에서 셸 변수 port로 지정한 포트 번호로 TCP 접속을 받는 스크립트입니다. 네트워크 개통을 확인할 때 사용합니다.

nc 명령어는 TCP/UDP 패킷을 작성해서 다양한 확인이 가능합니다. 이전 네트워크_06 스크립트에서는 클라이언트 쪽에서 송신하는 패킷을 작성하기 위해 사용했습니다. nc 명령어는 다양한 기능이 있어서 이 예제처럼 서버 쪽에서 대기하는 간단한 데몬같이 동작하는 스크립트도 작성할 수 있습니다.

1에서 nc 명령어의 세 가지 옵션 -v, -k, -l을 사용합니다.

-v 옵션은 verbose 모드(상세 모드)입니다. 접속이 있으면 메시지를 표시하므로 확인 목적으로 유용합니다.

-l 옵션은 듣기 모드로 실행합니다. 따라서 예전처럼 포트 8080에서 대기하는 프로세스가 실행할 수 있습니다.

-k옵션은 지속 옵션입니다. nc 명령어 듣기 모드는 한 번 접속이 이뤄지면 종료합니다. 네트워크 통신 확인은 몇 번이고 반복적으로 패킷을 보내므로 그때마다 종료된다면 곤란합니다. 따라서 접속이 유지되도록 -k 옵션을 사용합니다. 종료할 때는 Ctrl + C 를 입력합니다.

이 예제를 실제로 이용할 때는 다음과 같습니다.

  1. 네트워크 개통을 확인할 서버에서 이 예제 port-httpd.sh를 실행합니다.
  2. 네트워크 개통을 확인하고 싶은 서버에 network_06 스크립트로 패킷을 보냅니다.
  3. 네트워크 상태의 OK/NG를 판별합니다.

시스템을 구축하는데 물리 서버는 있지만 아직 미들웨어를 설치하지 않았거나 설정이끝나지 않았을 때 네트워크 부분을 우선 확인하고 싶다면 이 같은 예제로 간단한 데몬을 실행해서 개통 시험을 해보면 됩니다.

nc 명령어만으로도 실행 가능하지만 명령어에 익숙하지 않은 초보자라도 스크립트가 있으면 간단히 조작할 수 있고, 작업 실수를 줄이거나 작업 절차가 간단해지는 장점이 있습니다.

   

주의사항

  • Mac에서는 -v 옵션을 써도 접속이 있었는지를 알려주는 메시지가 출력되지 않습니다.

  • 포트번호 1024 미만의 표준 포트(Well-knownport)에 바인드하려면 root 권한이 필요하므로 1024 미만의 포트를 확인할 때는 이 스크립트도 root 권한으로 실행해야 합니다.