Google에서 검색 한 후 telnet
http 포트에 웹 서버를 연결하고 GET
html 페이지를 검색하는 데 사용할 수 있음 을 알았습니다 .
예를 들어 :
$ telnet web-server-name 80
그러나 이것이 어떻게 가능한지 이해할 수 없습니까?
포트 80이 http 서버용 인 경우 포트 80은 http
요청 만 수신 할 것이라고 생각했습니다 . 하지만 어떻게 수 있어요 telnet
에 HTTP
포트?
인가되지 telnet
및 HTTP
두 개의 서로 다른 프로토콜?
답변
축하합니다. 포트와 프로토콜이 서로 직접 연결되어 있지 않다는 것을 인식하여 네트워킹 계층 개념을 살펴 보았습니다. 다른 사람들이 말했듯이 텔넷은 모든 TCP 포트에 연결하는 데 사용할 수 있습니다. 그러나 이것이 가능한 이유를 이해하려면 네트워킹 계층에 대해 약간 이해해야합니다. OSI 7 계층 모델에 대해 들어 본 적이 있다면 telnet을 사용하여 다른 포트에 연결할 수 있습니다. 인터넷 상에서는 4 개의 계층과 인터넷 프로토콜 스위트 (Internet Protocol Suite) 라고만합니다.. 네트워킹 계층이 없으면 각 프로그램은 고유 한 프로토콜을 이해해야 할뿐만 아니라 고유 한 IP 주소 지정 체계와 포트 시스템을 정의해야합니다. 즉, 각 라우터는 이러한 체계를 라우팅하는 방법을 이해해야하며 다른 프로토콜은 많이 필요합니다. 배우고 진단하기가 더 어렵습니다. 간단히 말해서 인터넷은 레이어 없이는 거의 작동하지 않습니다.
관심있는 것은 전송 계층과 응용 프로그램 계층입니다. 전송 계층에는 포트 번호가 1에서 65535 사이 인 TCP 및 UDP와 같은 인터넷 프로토콜이 있습니다. 응용 프로그램 계층에는 HTTP, SMTP 및 DNS와 같은 프로토콜이 있습니다. 일반적으로 프로토콜을 정의하는 각 인터넷 표준 문서는 프로토콜이 기본적으로 사용해야하는 기본 TCP 또는 UDP 포트를 지정합니다. HTTP의 경우 TCP 포트 80, SMTP의 경우 TCP 포트 25, DNS의 경우 UDP 포트 53, Telnet의 경우 TCP 포트 23 등이 있습니다. 텔넷 프로그램은 실제로 TELNET 프로토콜을 사용합니다. 표준 프로토콜 인 합니다.그러나 현재 표준에 의해 대부분 고대의 것입니다. 프로토콜 시퀀스는 8 비트 문자로 만들어지기 때문에 GET, POST, HELO, LOGIN, 기타
프로토콜은 일반적으로 보이지 않기 때문에 telnet은 다른 TCP 포트에 연결하고 사용자가 수동으로 프로토콜을 입력 할 수있는 적절한 도구를 만들었습니다. 일부 네트워크 관리자는 서버의 문제를 진단하기 위해이 기술을 사용합니다. 그러나 텔넷 프로그램에는 여전히 고유 한 프로토콜이 있으며 때때로 추가 비트를 보낼 수 있으므로이 기술에 여전히 문제가 발생할 수 있습니다. 텔넷을 사용하면 전송 계층뿐만 아니라 응용 프로그램 계층에서도 실제로 “연결”이 이루어집니다. 다른 응용 프로그램 계층 프로토콜은 대부분의 진단에 대해 제대로 작동 할 수 있으며 텔넷 프로토콜을 방해하지 않습니다. nc (Net Cat. cat 명령의 네트워크 기반 버전에서 이름을 얻음)를 통해이 작업을 수행하는 더 좋은 프로그램이 있습니다.
$ nc www.stackexchange.com 80
nc 프로그램은 응용 프로그램 계층 프로토콜을 말하지 않으며이 프로토콜을 연결하면 인터넷 계층 (IP 주소) 및 전송 계층 (TCP 또는 UDP)에서만 “연결”됩니다. 즉, 어떤 응용 프로그램 계층 프로토콜이 사용되는지 제어 할 수 있습니다. 거의 모든 것이 공정한 게임이며 심지어 이진 프로토콜입니다. 또한 파일을 손상시키지 않고 전송 파일과 같은 유용한 작업을 수행하고 들어오는 트래픽에 대한 포트에서 수신 대기 할 수 있습니다.
nc -l 9000 < movie.mp4 (Your friend runs this)
nc friends.computer.hostname 9000 > movie.mp4 (you run this)
그런 다음 movie.mp4는 FTP와 같은 응용 프로그램 계층 프로토콜을 사용하지 않고 네트워크를 통해 전송됩니다. 응용 프로그램 프로토콜은 실제로 친구가 명령을 실행할 준비가되었음을 알려주는 친구입니다.
nc는 UDP 패킷 및 UNIX 도메인 소켓도 처리 할 수 있습니다. 듣기 위해 그것을 사용하는 것도 흥미로울 수 있습니다.
nc -l 12345
이제 웹 브라우저에서 http : // localhost : 12345 /를 방문 하고 nc 세션에서 브라우저의 GET / HTTP/1.1
요청을 볼 수 있습니다. 이 시점에서 무언가를 입력하고를 누르면 Ctrl-D
브라우저에 일반 텍스트로 표시됩니다 (HTML을 표시하려면 HTML 코드가 뒤 따르는 적절한 HTTP 프로토콜 응답을 다시 보내야합니다).
때로는 HTTP와 같은 하나의 프로토콜을 기본적으로 사용하는 프로그램은 다른 프로토콜을위한 다른 포트에 연결할 수 있습니다. 일반적으로 GUI 브라우저에서 일부 포트에 대한 연결을 제한했기 때문에 더 이상이 작업을 수행 할 수 없지만 curl과 같은 프로그램을 사용하여 포트 25 (메일 전송을위한 SMTP)에 연결하면 아마도 몇 가지를 보게 될 것입니다 프로토콜 중단에 대한 오류.
$ curl yourispsmtpserverhost.com:25
220 yourispsmtpserverhost.com ESMTP Postfix
221 2.7.0 Error: I can break rules, too. Goodbye.
curl은 일반적으로 HTTP 프로토콜을 사용하므로 TCP 핸드 셰이크를 설정 한 후 다음과 같이 데이터를 보내기 시작합니다.
GET / HTTP/1.1
Host: yourispsmtpserverhost.com:25
User-agent: curl
그러나 SMTP 서버가 기대하는 것은 SMTP입니다.
HELO myhomecomputername.local
어느 시점에서 서버는 식별 라인을 다시 보냅니다.
250 yourispsmtpserverhost.com
따라서 curl이 SMTP 서버와 전송 계층 연결을 설정하지 못하게하는 것은 없으며 프로토콜을 말할 수 없습니다. 그러나 telnet 또는보다 바람직하게는 nc와 같은 프로그램으로 프로토콜을 직접 말할 수 있습니다.
답변
telnet
모든 tcp 포트에 연결할 수있는 도구입니다.
기본적으로 텔넷 포트 (23)에 연결되지만 http 포트 (80) 또는 smtp 포트 (25) 또는 그 밖의 모든 것에 연결하도록 지정할 수 있습니다.
그러나 원격 서버가 해당 포트에서 수신하는 프로토콜을 “말하는”방법을 알아야합니다.
예를 들어, 웹 사이트의 헤더를 얻으려면 (유죄를 보호하기 위해 도메인 이름 등이 변경됨) :
$ telnet www.example.com 80
Trying xxx.xxx.xxx.xxx...
Connected to www.example.com.
Escape character is '^]'.
HEAD http://www.example.com/ HTTP/1.0
HTTP/1.1 200 OK
Date: Fri, 30 Oct 2015 09:28:58 GMT
Server: Apache/2.4.17 (Debian)
Last-Modified: Sun, 14 Nov 2010 06:30:26 GMT
ETag: "843-494fd75830480"
Accept-Ranges: bytes
Content-Length: 2115
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
Connection closed by foreign host.
HEAD
라인은 내가 연결에 입력 한 것입니다. http 프로토콜을 사용하려면 HEAD 또는 GET 또는 요청의 끝을 나타내는 빈 줄을 보내야합니다. HEAD 요청 직후 빈 줄입니다.
답변
두 프로토콜의 초기 협상에는 텍스트 명령이 사용되므로 명령을 연결하고 시작할 수 있습니다. 이것은 SMTP와 같은 다른 오래된 프로토콜에 해당하며 telnet은 오랫동안 해당 서비스 연결 문제를 해결 하는 데 사용되었습니다 .
예를 들어
프로토콜은 통신하는 포트와 독립적입니다. 거의 모든 구현을 모든 포트에서 수신하도록 구성 할 수 있습니다.
HTTPS와 같은 일부 프로토콜은 협상에 텍스트 명령을 사용하지 않습니다. 그러나 (보통) 서버가 수신 하는 포트 에 연결할 수는 있지만 유용한 것은 없습니다.
답변
당신의 이해 중 일부는 정확하고 일부는 정확하지 않습니다. 포트 80은 일반적으로 HTTP 용으로 예약되어 있지만 이는 단지 규칙입니다. 모든 프로그램은 시스템의 열린 포트에서 청취 할 수 있습니다. 연결중인 시스템의 포트 80에서 수신 대기하는 웹 서버가있는 경우 HTTP를 사용하여 통신해야합니다.
telnet
전혀 프로토콜이 아니며 모든 포트의 모든 호스트에 원시 텍스트를 보낼 수있는 프로그램입니다. 원격 호스트는 어떤 프로그램이 연결되어 있는지 모릅니다. 볼 수있는 것은 패킷이 전송되는 것입니다. 원격 호스트가 기대하는 프로토콜을 준수하는 패킷을 보내는 모든 프로그램이 작동하므로 telnet
텍스트 기반 프로토콜을 통해 통신 하는 데 사용할 수 있습니다 .
의 행을 따라 무언가를 보냈습니다 GET /path/to/a/file HTTP/1.1
. 유효한 HTTP 1.1 명령 이며 웹 브라우저에서 보내는 요청과 동일하게 보이므로 제대로 작동합니다.