일반적으로 리눅스에서 포트를 체크할 때는 telnet을 사용하실 텐데, telnet은 일단 연결되면 빠져나와야 하는 불편함이 있어 자동화 스크립트나 모니터링 용도로 사용하기엔 불편합니다. 또한 UDP 포트는 체크할 수 없죠. 이럴 때 사용하면 좋은 프로그램이 바로 nc입니다.

nc는 크게 두가지 기능이 있습니다. 바로 상대방 포트가 오픈되어 있는지 체크하는 기능과, 내 서버에서 임의의 포트를 리스닝하게 만드는 기능입니다. 저는 서버를 운영하면서 포트 오픈 여부를 체크할 일이 자주 발생하더군요. 일단 물리적인 방화벽 장비가 중간에 해당 포트를 막고 있는지 확인할 수 있고, 상대방 OS에서 방화벽을 오픈하지 않은 경우도 확인할 수 있습니다.

1. 포트 체크하기

예제로 네이버의 80포트 오픈 여부를 체크해보겠습니다.

nc -z www.naver.com 80


보시다시피 잘 열려 있네요. 이렇게 기본적인 사용법은 -z 옵션 주고 서버 주소 뒤에 포트 번호를 입력하면 됩니다. 기본은 TCP 포트입니다.

다음은 UDP 포트를 체크해보겠습니다. -u 옵션을 주면 되는데요, NTP 서버는 UDP 123 포트를 사용하죠. 예제로 kr.pool.ntp.org를 체크해보겠습니다.

nc -zu kr.pool.ntp.org 123

UDP 포트는 시간이 좀 걸리더군요. 아래와 같이 잘 열려 있음을 확인했습니다.


마지막으로 ipv4 옵션을 써야 하는 경우가 있는데요, 올레닷컴이 대표적으로 그렇더군요. 올레닷컴을 그냥 -z만 주고 체크하면 10초 이상의 딜레이가 발생합니다. 이때 -4 옵션을 주면 해결되더군요. ipv6로 DNS Resolve 하면서 발생하는 문제로 추정하고 있습니다.


사실 이 ipv4 옵션은 nc 뿐 아니라 wget이나 curl을 사용할 때도 동일하게 적용됩니다. 올레닷컴을 wget이나 curl로 체크하면 역시 10초 이상의 딜레이가 발생하지만 -4 옵션을 주면 즉시 반응합니다.


2. 포트 리스닝하기

다음은 임의의 포트를 리스닝하게 만드는 법입니다. 예를 들어 WEB 서버는 DMZ에 존재하고 MS-SQL DB서버는 사내망에 존재하는 경우, 1433 포트가 중간에 물리적인 방화벽으로 막혀있는지 여부를 테스트해볼 때 유용하겠죠. (아직 MS-SQL을 설치하지 않아서 리스닝하는 데몬, 프로세스가 없는 경우) 또는 WAS에서 사용하는 8009 포트 역시 마찬가지입니다.

저는 예제로 1433 포트를 리스닝 시켜보겠습니다. -l 옵션을 주시면 됩니다.

nc -l 1433

그러면 아래와 같이 쉘이 응답 대기상태로 진입합니다. 원격에서 해당 포트로 패킷이 날아오면 리스닝 상태가 풀립니다. 어차피 방화벽 오픈 여부만 체크해보면 되니까 한번으로도 충분하겠죠.


이 상태로 제 PC에서 tcping으로 패킷을 한번 날려보겠습니다.
(참고 : 2011/09/22 - [유용한 프로그램] - 특정 TCP 포트로 Ping 날리는 프로그램 - tcping)


보시다시피 정상적으로 1433 포트를 리스닝 하고 있음을 확인했습니다. 둘 사이엔 방화벽에서 1433 포트가 오픈되어 있다는 말이겠죠.

이상입니다.
신고

  1. 윤동현
    2012.09.29 22:05 신고

    고스트에 관심이 많은 학생입니다^^
    스누피님께 질문드릴게 있는데요
    제가 실험을 해봣습니다
    윈도우7 64비트 순정 cd랑 gho로 말이죠
    근데 둘다 포맷하고 어떤게임의 트레이너를 켯더니 고스트로포맷한건 렉이걸리고 cd로 포맷한건 렉도없고 정상적인데
    성능에 차이가 어느정도 나는건가요?
    즐거운 추석 보내세요

  2. BlogIcon ikko
    2012.10.02 07:42 신고

    nc도 좋지만 ncat이 더 좋지 말입니다.
    포트체크보다 스켄을 하려면 nmap도 좋을 것 같네요 ^^