[Linux] 기본 설정으로 포트 확인하기

ping, telnet, nc, curl, bash

Posted by owin2828 on 2020-01-08 15:17 · 2 mins read

외부 서버의 포트가 살아있는지 open여부를 점검하기


이런 저런 이유로, 명령어들을 사용할 수 없는 경우가 존재한다.
나도 원격 서버가 살아있는지 점검해야 하는데, host 서버에 telnet등이 지원하지 않아 고생한 경험이 있다.
이러한 경우를 대비해, 서버와 통신이 되는지 확인하는 명령어를 종류에 따라 정리해 보았다.
다음은 지극히 주관적인 (쉬운?) 순서대로 방법이다.

1. Ping

포트고 뭐고 필요 없을 때

ping은 port를 사용하지 않는다.
이유는 TCP/IP 계층에서 사용되고, port가 사용되는 상위 계층인 TCP/UDP 와는 상관이 없기 때문이다.
즉, ping으로는 port 확인이 불가능하다.

$ ping [IP]

// 예시
$ ping 8.8.8.8


2. Telnet

특정 port를 확인해야 할 경우

$ telnet [IP] [PORT]  

// 예시
$ telnet 100.1.1.1 8080


3. nc(NetCat)

일반적으로 UNIX의 cat명령과 비슷한 사용법 이지만, 대상이 파일이 아니라 network connection이다.
포트 확인 기능 말고도 다양한 기능으로 사용이 된다.

$ nc -z [IP] [PORT]

// 예시
$ nc -z 100.1.1.1 8080


4. curl

대부분 서버는 telnet이 설치되어 있지만, 보안이슈나 최소 설치를 한 경우 사용이 불가능한 경우가 있다.
그런 경우 다음의 명령을 사용하자. 아무리 최소 설치를 해도 curl은 설치되어 있기 때문이다.

curl의 parameter중 URL telnet 스키마를 사용하여 서버 통신 확인

$ curl -v telnet://[IP]:PORT  

// 예시
$ curl -v telnet://100.1.1.1:8080


5. bash

약간 하드한 방법이다. shell에 익숙하지 않은 사람들은 4번에서 끝내기를 권장한다.
TCP 연결을 간단하게 bash의 내장된 기능으로 확인할 수 있다.

$ timeout 5 bash -c 'cat < /dev/null > /dev/tcp/[IP]/[PORT]'; echo $?

// 예시
$ timeout 5 bash -c 'cat < /dev/null > /dev/tcp/100.1.1.1/8080'; echo $?
// 결과
$ 0   // 성공 
$ 1   // 실패 연결 전 에러(hostname not known등 오류)
$ 124 // 실패 Timeout 에러

echo $?는 UNIX에서 바로 전 실행의 결과를 보여주는 명령어이다.