이런 저런 이유로, 명령어들을 사용할 수 없는 경우가 존재한다.
나도 원격 서버가 살아있는지 점검해야 하는데, host 서버에 telnet등이 지원하지 않아 고생한 경험이 있다.
이러한 경우를 대비해, 서버와 통신이 되는지 확인하는 명령어를 종류에 따라 정리해 보았다.
다음은 지극히 주관적인
(쉬운?) 순서대로 방법이다.
포트고 뭐고 필요 없을 때
ping
은 port를사용하지 않는다
.
이유는 TCP/IP 계층에서 사용되고, port가 사용되는 상위 계층인 TCP/UDP 와는 상관이 없기 때문이다.
즉, ping으로는 port 확인이불가능
하다.
$ ping [IP]
// 예시
$ ping 8.8.8.8
특정
port를 확인해야 할 경우
$ telnet [IP] [PORT]
// 예시
$ telnet 100.1.1.1 8080
일반적으로 UNIX의 cat
명령과 비슷한 사용법 이지만, 대상이 파일이 아니라 network connection이다.
포트 확인 기능 말고도 다양한 기능으로 사용이 된다.
$ nc -z [IP] [PORT]
// 예시
$ nc -z 100.1.1.1 8080
대부분 서버는 telnet이 설치되어 있지만, 보안
이슈나 최소 설치
를 한 경우 사용이 불가능한 경우가 있다.
그런 경우 다음의 명령을 사용하자. 아무리 최소 설치를 해도 curl은 설치되어 있기 때문이다.
curl
의 parameter중 URL telnet 스키마를 사용하여 서버 통신 확인
$ curl -v telnet://[IP]:PORT
// 예시
$ curl -v telnet://100.1.1.1:8080
약간 하드한 방법이다.
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에서 바로 전 실행의 결과를 보여주는 명령어이다.