본문 바로가기
프로그래밍/LINUX , UNIX

linux 서버 포트가 열려있는지 확인 방법 총정리

by 애플 로그 2022. 12. 2.
반응형

linux 서버 포트가 열려있는지 확인 방법 총정리 

 

프로젝트 진행시 실전에서 아주 자주쓰는 기능중에 하나이다. 

지금 이런 명령어를 호출해본다는 의미는 뭔가 대상서버로의 호출이 정상적이지 않기 떄문일거라고 생각된다.

 

실제 서비스가 떠있는지에 대한 확인을 하기도 하고, 

금융권 같은곳에서 프로젝트를 하는경우에 방화벽이 오픈이 되어있는지 확인하는데 쓰이기도 한다.

 

 

1. telent {serverip} {port}

포트가 정상적으로 열려있는 경우 

[ynkim@test ~]$ telnet 10.123.123.123 8080
Trying 10.123.123.123...
Connected to 10.123.123.123.
Escape character is '^]'.

 

포트가 정상적으로 열려 있지 않은 경우

[ynkim@test ~]$ telnet 10.123.123.1231234
Trying 10.123.123.123...
telnet: connect to address 10.123.123.123: Connection refused

 

 

2. echo /dev/tcp/{serverip}/{port}

 

포트가 정상적으로 열려있는 경우 

[ynkim@test ~]$ echo > /dev/tcp/10.123.123.123/8081
/dev/tcp/10.123.123.123/8081
[ynkim@vm-02 ~]$ echo $?
0

// 이렇게 0이 나오면 케이스가 정상이다

 

포트가 정상적으로 열려 있지 않은 경우

[ynkim@test ~]$ echo > /dev/tcp/123.123.123.123/1234
-bash: connect: 연결 시간 초과
-bash: /dev/tcp/123.123.123.123/1234: 연결 시간 초과

 

 

3. curl -v {server_ip}:{port}

 

포트가 정상적으로 열려있는 경우 

 

[ynkim@test ~]$ curl -v 127.0.0.1:3000
* About to connect() to 127.0.0.1 port 3000 (#0)
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 3000 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 127.0.0.1:3000
> Accept: */*
>
< HTTP/1.1 200
< Vary: Origin
< Vary: Access-Control-Request-Method
< Vary: Access-Control-Request-Headers
< Last-Modified: Tue, 15 Nov 2022 00:26:40 GMT
< Accept-Ranges: bytes
< Content-Type: text/html
< Content-Language: ko-KR
< Content-Length: 4420
< Date: Fri, 02 Dec 2022 00:40:51 GMT

//  대상 페이지의 호출 결과 ~~~~~~

----이하 생략 -----

 

포트가 정상적으로 열려 있지 않은 경우

[ynkim@test ~]$ curl -v 127.0.0.1:1234
* About to connect() to 127.0.0.1 port 1234 (#0)
*   Trying 127.0.0.1...
* 연결이 거부됨
* Failed connect to 127.0.0.1:1234; 연결이 거부됨
* Closing connection 0
curl: (7) Failed connect to 127.0.0.1:1234; 연결이 거부됨

 

 

4. nc {server_ip} {port}

NC 명령어

TCP 또는 UDP 프로토콜을 사용하는 네트워크 환경에서 데이터를 읽고 쓰는 간단한 프로그램이다
일반적으로 상대 서버의 포트가 열렸는지 확인하거나, 직접 서버가 되어 원격 서버에서(클라이언트) 접속이 가능하지 확인하는 용도로 쓰인다. 

UDP 포트도 확인할수 있다는 장점이 있다.

 

포트가 정상적으로 열려있는 경우 

 

[ynkim@test]$ nc 123.123.123.123 8080     // 일반 TCP 포트

[ynkim@test]$ nc -u 123.123.123.123 8080     // UDP 포트

 

 

커서가 한칸 내려오며 아무런 반응이 없다.

정상적으로 접속이 가능하다.

 

 

포트가 정상적으로 열려 있지 않은 경우

[ynkim@test]$ nc 172.123.123.123 1234
Ncat: Connection refused.

 


 

 

"포트가 정상적으로 열려 있지 않은 경우"는 실제 서비스는 기동중이나, 방화벽이 오픈되지 않는 경우도

흔한 케이스 이다. 생각 보다 복잡한 케이스가 많지만, 대략적으로  이렇다.

 1) 출발지 서버 (명령어 실행하는 서버) ->  타겟 서버로  방화벽이 막혀있다.

 2) 실제 타겟 서버의 서비스가 기동되고 있지 않다.

 3) 타겟 서버의 외부IP, 내부IP 의 구분을 정확하게 인지 하지 못했다.

 4) 기타 다른 등등 서버장비간의 문제들

댓글