Operation System/General
포트 오픈 확인하기 (telent, curl, python)
junsuyoun
2022. 9. 25. 00:00
728x90
반응형
서버 대 서버 또는 클라이언트 대 서버 포트 연결이 정상적으로 이루어져있는지 확인하는 방법
telnet
- telnet을 통해 확인할 수 있는 포트 오픈 상태
telnet <IP> <PORT>
서버와 통신이 되며 포트 오픈이 되었을 때
# telnet 192.168.152.31 8629
Trying 192.168.152.31...
Connected to 192.168.152.31.
Escape character is '^]'.
서버와 통신이 되며 포트 오픈이 되어 있지 않을 때
# telnet 192.168.151.32 18629
Trying 192.168.151.32...
telnet: connect to address 192.168.151.32: Connection refused
- 서버와 통신이 되며 포트 오픈이 되어 있고 네트워크 상태가 정상이라면 즉시 telnet에 연결 됩니다.
- 서버와 통신이 되며 포트 오픈이 되어 있지 않으면 telnet 명령 수행 시 15초(timeout) 동안 통신 되지 않으면 telnet이 종료 됩니다.
- 15초 내에 통신이 재개 되거나 즉시 연결이 되지 않고 간헐적으로 연결이 늦어진다면 네트워크 상태가 불안할 수 있습니다.
- 간혹 서버와 통신 되며 포트 오픈이 되어 있다고 하지만 통신이 안된다고 하면 !
- 프로세스가 다운 되어 있을 수 있습니다. 프로세스가 다운되면 포트도 함께 내려 갑니다.
- 방화벽에서 차단되고 있을 수 있습니다.
- OS 방화벽 (iptables, firewalld, Windows Defender 방화벽)
- 방화벽 장비

curl
- curl -v 옵션을 사용하여 Connected를 확인할 수 있습니다.
- 생각보다 유용하며 docker container 환경에서도 telnet은 설치되어 있지 않지만 curl은 설치 되어 있으니 활용 가능 합니다.
연결 성공
# curl -v telnet://x.x.x.x:22
* About to connect() to x.x.x.x port 22 (#0)
* Trying x.x.x.x...
* Connected to x.x.x.x (x.x.x.x) port 22 (#0)
연결 실패
# curl -v telnet://x.x.x.x:1521
* About to connect() to x.x.x.x port 1521 (#0)
* Trying x.x.x.x...
* Connection refused
* Failed connect to x.x.x.x:1521; Connection refused
* Closing connection 0
curl: (7) Failed connect to x.x.x.x:1521; Connection refused
python
- Linux/Unix는 기본적으로 python2가 설치되어 있습니다. (최신버전에서는 python3으로 변경 됨)
- python2나 python3는 테스트에는 영향 없음
# cat portscan.py
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2)
result = sock.connect_ex(('<IP>',<Port>))
if result == 0:
print('open')
else:
print('false')
연결 성공
# python portscan.py
open
연결 실패
# python portscan.py
false
- 대부분의 환경에서는 telnet이 사용 가능 합니다.
- 최근 MSA(MicroService Architecture) 때문에 Container 환경이 주를 이루는 경우 telnet 패키지가 설치가 되어 있지 않는 경우가 있습니다.
- Container 환경에 curl은 image에 기본으로 탑재되어 있어 활용 가능 합니다.
- curl도 되지 않는 환경이라면 활용 가능한 언어에서 socket라이브러리를 활용하여 직접 구현하여 사용하셔도 됩니다. (python, 기타 언어들)
728x90
반응형