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


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.txttelnet 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.