텔넷에 명령으로 텍스트 파일의 내용 공급


10

명령을 telnet docs.python.org 80사용 http://docs.python.org/2/license.html하면 실제 요청을 입력하여 수동 HTTP 요청을 수행 할 수 있습니다 .

이제 실시간으로 입력하는 대신 텍스트 파일에서 요청을 제공하고 싶습니다.

나는 이것을 시도했다 :

cat request.txt|telnet docs.python.org 80


request.txt :

GET /2/license.html HTTP/1.1 
Host: docs.python.org

빈 줄로 파일을 완성해야합니다. 그렇지 않으면 잘못된 요청이 표시됩니다.


그러나 서버에 대한 연결이 즉시 닫힙니다.

request.txt 를 telnet docs.python.org 80어떻게 올바르게 파이프해야 합니까?


편집하다:

알아두면 좋습니다. HEAD대신에 를 사용 하면 메시지 본문을 제외하고 요청한 GET것과 동일한 응답을받습니다 GET.
따라서 HEADHTTP 헤더 만 검사하려는 경우 사용 하십시오. (즉, 응답 내용이 쉘 출력을 어지럽히 지 않도록하십시오.)


비교할 수 있도록 수동으로 실행 한 실제 명령을 포함시킬 수 있습니까? 내가 GET게시 한 것을 실행하면 408 Request Time-out오류가 발생합니다. 또한 wget http://docs.python.org/2/license.html옵션이 아닙니까?
— terdon

명령이 정확합니다. 입력 한 순간 서버와 연결되어 있다고 생각 telnet docs.python.org 80하므로 몇 초 내에 서두 줄을 두 번 입력해야합니다 (필요한 경우 복사 붙여 넣기). 그렇지 않으면 서버가 시간 초과 오류를 반환합니다.
— Bentley4

다음은 정확한 명령입니다.telnet docs.python.org 80 <ENTER> GET /2/license.html HTTP/1.1 <ENTER> Host: docs.python.org <ENTER> <ENTER>
— Bentley4

1
<ENTER>마지막에 두 번째 로 입력 해야하는 이유 는 요청 헤더 다음에 HTTP 프로토콜에 빈 줄이 더 필요하기 때문입니다. 참고 항목 요청 메시지 섹션 의 HTTP 위키 기사
— Bentley4

1
이론적으로, 당신은 할 수 있어야 telnet < request.txt하지만 GET명령이 작동 하지 않습니다 .
— terdon

답변:


21

"telnet"대신 netcat (nc 명령)을 사용하십시오.

고양이 request.txt | nc docs.python.org 80

Telnet은 빠르고 쉬운 해킹이지만 netcat은 분명히 작업에 적합한 도구입니다.


텔넷은 어떻게 'Quicker'와 'Easier'가 넷캡입니까? 이 경우와 관련하여 사용상의 차이는 없습니다.
— Bentley4

확실히이 경우는 아니지만 사람들이 (저를 읽고, 분명히 당신 !!!) 사람들이 텔넷을 사용하는 경향이 있다고 생각합니다. 왜냐하면 우리가 가장 먼저 배운 것은 물론 Windows와 Linux에서 사용할 수 있기 때문입니다. Windows에 사전 설치되어 있지 않습니다.
— davidgo

5

나는 실제로 경험이 telnet없지만 파일 리디렉션에서 입력을받습니다.

telnet < abc.txt

다음과 같이 서버에 올바르게 연결하도록 할 수 있습니다.

$ cat abc.txt
open docs.python.org 80
$ telnet < abc.txt
telnet> Trying 82.94.164.162...
Connected to dinsdale.python.org.
Escape character is '^]'.
Connection closed by foreign host.

어쩌면 당신은 GET명령 을 받아들이는 방법을 알아낼 수 있었지만 나는 할 수 없었습니다. 대안은 expect스크립트 를 사용하는 것입니다 .

#!/usr/bin/expect

spawn telnet docs.python.org 80
expect "Escape character is '^]'." { 
     send "GET /2/license.html HTTP/1.1\nHost: docs.python.org\n\n" 
}
interact

그런 다음 스크립트를로 저장하고 telnet.exp실행 가능하게 만들고 실행할 수 있습니다.

./telnet.exp > output.html

쿨, 나는 몰랐다 expect! 이 경우에 가장 적합한 솔루션이므로 davidgo의 답변을 선택했습니다. netcap과 telnet 사이에 내가 원하는 것을 사용하는 데 차이가 없습니다. 그럼에도 불구하고 Terdon의 노력에 감사드립니다.
— Bentley4

1
@ Bentley4 문제 없습니다, 사용 nc하는 것이 더 나은 솔루션입니다, 당신 은 그것을 받아 들여야합니다.
— terdon

interact해당 expect스크립트 를 끝내는 올바른 방법이 어떻게되는지 보지 못했습니다 .
— 2rs2ts

@ 2rs2ts 나는 기대에 대해 거의 알지 못한다. 당신이 옳을 수도 있지만, 당신의 의견이 왜 그것이 잘못되었다고 생각하는지 알려주지 못했기 때문에 말할 수 없다. 내 이해는 interact"현재 프로세스를 사용자에게 제어하여 키 입력이 현재 프로세스로 전송되고 현재 프로세스의 stdout 및 stderr이 반환된다"는 것 man expect입니다. 따라서 interact사용자에게 실제로 텔넷 연결을 사용하는 방법을 제공하는 방법입니다.
— terdon

원래 질문은 파일의 내용과 telnet상호 작용하는 대신 파일의 내용을 공급하는 것에 관한 것이었기 때문에 끝내 close -i $spawn_id거나 그와 비슷한 것을 끝내야한다고 생각합니다 . 그런 다음 스크립트가 종료됩니다. 와 interact나는 종료합니다 실제로 없습니다 telnet전혀, 내 터미널을 폐쇄했다. 꽤 비참하다 (부분적으로 내 잘못이었을 수도 있지만)
— 2rs2ts
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.