2017-11-22 1 views
0

다음 스크립트를 작성했습니다. 아직 색인을 지원하지 않습니다. 내가 겪고있는 문제는 netcat을 사용하여 페이지를로드하는 것과 관련이있다. 명령 줄을 사용하여 수동으로이 작업을 수행 할 수 있지만 스크립트에서 오류없이 수행 할 수있는 명령과 똑같은 명령을 실행하려고 할 때 수행 할 수 있습니다. 내가 생각할 수있는 유일한 방법은 출력물이 다른 곳으로 이동한다는 것입니다.netcat을 사용하여 bash에서 http get 요청을 발행하십시오.

#!/bin/bash 
PORT=80 

while [ true ] 
do 
    echo "Type the address you wish to visit then, followed by [ENTER]:" 
    read address 
    path=${address#*/} 
    domain=${address%%/*} 
    nc $domain $PORT 
    printf "GET /$path HTTP/1.1\n" 
    printf "Host: $domain\n" 
    printf "\n" 
    printf "\n" 
done 
+0

'[true] '는 실제로 생각한대로 작동하지 않지만 실제로 작동합니다. 'while true '또는''nonempty-string-is-still-nonempty' '를 의미합니다. – tripleee

+0

접두사 관련 : https://stackoverflow.com/questions/36371221/bash-if-statement-too-many-arguments ; 또한 https://stackoverflow.com/questions/37586811/pass-commands-as-input-to-another-command-su-ssh-sh-etc는 실제로 이것에 관한 것이 아니지만 잘하면 정신 모델을 명확히하는 데 도움이됩니다. 스크립트의 작동 방식. – tripleee

답변

0

nc 작품 : 그 작업을 수행하는

한 가지 방법은 입력 리디렉션입니다.

{ 
    printf "GET /%s HTTP/1.1\r\n" "$path" 
    printf "Host: %s\r\n" "$domain" 
    printf "\r\n" 
    printf "\r\n" 
} | nc "$domain" "$port" 
  • HTTP 각 줄의 끝에 \r\n이 필요합니다. 일부 서버는 \n만을 허용하지만 일부는 법의 서한을 고수하고 지정된대로 \r\n 만 허용합니다.

  • nc의 표준 입력에이 줄을 보내야합니다.

  • printf "Get %s HTTP/1.1\r\n" "$path" because $ 경로 may contain % signs and that would confuse printf`를 사용하는 것이 더 좋습니다.

0

요청 헤더를 nc의 표준 입력에 전달해야합니다. 거기에서 표준 출력으로 읽고 어떤 포트 및 복사 : 주어진 주소로 표준 입력을 복사하여

while true 
do 
    echo "Type the address you wish to visit then, followed by [ENTER]:" 
    read address 
    path=${address#*/} 
    domain=${address%%/*} 
    nc $domain $PORT <<EOF 
GET /$path 
Host: $domain 

EOF 
done 
관련 문제