1.6.3 텔넷(Telnet)을 이용한 실제 예제
HTTP는 TCP/IP를 사용하고 있으며, 이진 형식이 아닌 문자열 기반이기 때문에, 웹서버와 직접 대화하는 것도 간단하다.
웹브라우저 연결의 기본적인 절차
- HTTP와 TCP/IP: HTTP는 문자열 기반의 TCP/IP 프로토콜을 사용한다.
- 웹브라우저 연결 절차:
- URL 입력 (http://www.test.com:80/tool.html).
- 포트번호 80 추출한다.
- 호스트명 (www.test.com) 추출한다.
- DNS를 통해 IP 주소 획득한다.(www.test.com -> 161.58.228.45)
- IP 주소 161.58.228.45 포트 80에 연결한다.
- 클라이언트에서 서버로 HTTP GET 요청 전송한다.
- 서버에서 클라이언트로 HTTP 응답 수신한다.
- 클라이언트에서 HTTP 응답을 읽는다.
- 커넥션 종료한다.
- 브라우저가 페이지 표시한다.
- 텔넷 유틸리티의 역할: 키보드를 TCP 포트에 연결하고 TCP 포트의 출력을 화면에 표시한다.
- 텔넷의 사용법:
- 텔넷으로 웹 서버와 직접 대화 가능하다.
- 웹 서버가 클라이언트로써 텔넷의 입력을 처리하고, 응답을 화면에 출력한다.
- 실습 사례: https://jsonplaceholder.typicode.com 사이트를 텔넷으로 접속한다.
telnet jsonplaceholder.typicode.com 443
명령을 실행한다.GET /todos/1 HTTP/1.1
와Host: jsonplaceholder.typicode.com
입력 후 빈 줄 입력하여 요청 완료한다.- 400 Bad Request 응답 수신.
실습
여기선 https://jsonplaceholder.typicode.com
으로 실습해보겠다.
brew install telnet
# 텔넷을 이용한 HTTP 트랜잭션
(base) hyungju-lee@hyungju-leeui-MacBookAir ~ % telnet jsonplaceholder.typicode.com 443
Trying 172.67.167.151...
Connected to jsonplaceholder.typicode.com.
Escape character is '^]'.
GET /todos/1 HTTP/1.1
Host: jsonplaceholder.typicode.com
HTTP/1.1 400 Bad Request
Server: cloudflare
Date: Sat, 30 Dec 2023 11:58:04 GMT
Content-Type: text/html
Content-Length: 155
Connection: close
CF-RAY: -
<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>cloudflare</center>
</body>
</html>
- 텔넷의 한계: 텔넷은 HTTP 클라이언트는 잘 흉내 내지만 서버로는 부적합하며, 자동화된 스크립트 작성에도 적합하지 않다.
- 대안 도구: 보다 유연한 nc(netcat) 도구가 있으며, 이는 HTTP를 포함한 UDP 또는 TCP 기반 트래픽을 조작하고 스크립트할 수 있다.