알아두면 좋은 IT 지식/Network

[리눅스] 가장 간단한 3가지 통신 테스트 방법 (telnet, curl, /dev/tcp)

uutopia 2022. 6. 24. 17:42

리눅스 서버에서 어떤 서비스가 동작하고 있고, 해당하는 서비스의 포트가 listen 상태일 때 다른 서버에서 통신을 확인하는 가장 보편적이고 간단한 통신 테스트 방법 3가지를 소개하고자 한다.

 

1. telnet

telnet IP PORT

 

연결 실패 시

$ telnet 10.0.2.16 9936
Trying 10.0.2.16...
telnet: connect to address 10.0.2.16: Connection refused

 

연결 성공 시

$ telnet 10.0.2.16 9936
Trying 10.0.2.16...
Connected to 10.0.2.16.
Escape character is '^]'.

 

간혹 telnet이 설치되어 있지 않거나 보안상 telnet 명령어의 사용이 불가능한 경우 curl을 사용한다.

 

2. curl

curl -v telnet://IP:PORT/

 

연결 실패 시

$ curl -v telnet://10.0.2.16:9936
* About to connect() to 10.0.2.16 port 9936 (#0)
*   Trying 10.0.2.16...
* 연결이 거부됨
* Failed connect to 10.0.2.16:9936; 연결이 거부됨
* Closing connection 0
curl: (7) Failed connect to 10.0.2.16:9936; 연결이 거부됨

 

연결 성공 시

$ curl -v telnet://10.0.2.16:9936
* About to connect() to 10.0.2.16 port 9936 (#0)
*   Trying 10.0.2.16...
* Connected to 10.0.2.16 (10.0.2.16) port 9936 (#0)

 

혹시 둘 다 사용이 힘들다면? 쉘에서 제공하는 /dev/tcp 기능을 사용한다.

 

3. /dev/tcp

/dev/tcp/IP/PORT

 

연결 실패 시

$ echo > /dev/tcp/10.0.2.16/9936
-bash: connect: 연결이 거부됨
-bash: /dev/tcp/10.0.2.16/9936: 연결이 거부됨

$ echo $?
1

 

연결 성공 시

$ echo > /dev/tcp/10.0.2.16/9936

$ echo $?
0

 

$? 는 바로 직전 명령어의 실행 결과를 받아온다 (성공 : 0, 실패 : 1)

 

 

여기까지 가장 많이 쓰이는 TCP 통신 테스트 방법에 대해서 알아 봤다.

그럼 Client가 아닌 Server에서는 어떻게 통신 여부를 확인할 수 있을까?

 

가장 많이 쓰이는 방법은 netstat 명령어이다.

netstat

$ netstat -an | grep PORT

 

연결을 기다리는 중

$ netstat -an | grep 9936
tcp        0      0 10.0.2.16:9936          0.0.0.0:*               LISTEN

 

연결 중

$ netstat -an | grep 9936
tcp        0      0 10.0.2.16:9936          10.0.2.15:54937         ESTABLISHED

 

연결이 끊어짐

$ netstat -an | grep 9936
tcp        0      0 10.0.2.16:9936          10.0.2.15:54937         TIME_WAIT