문제

HTTP의 작동 방식에 대해 자세히 알아보기 위해 Netcat과 함께 놀려고 노력하고 있습니다. Bash 또는 Perl에서 일부를 스크립트하고 싶지만 테스트 초기에 걸림돌을 쳤다.

프롬프트에서 NetCat을 직접 실행하고 헤드 요청을 입력하면 작동하고 프로보중인 웹 서버의 헤더를받습니다.

이것은 작동합니다 :

    [romandas@localhost ~]$ nc 10.1.1.2 80
    HEAD / HTTP/1.0

    HTTP/1.1 200 OK
    MIME-Version: 1.0
    Server: Edited out
    Content-length: 0
    Cache-Control: public
    Expires: Sat, 01 Jan 2050 18:00:00 GMT

    [romandas@localhost ~]$

그러나 동일한 정보를 텍스트 파일에 넣고 파이프 또는 리디렉션을 통해 NetCat에 공급할 때 스크립팅을 준비 할 때 헤더를 반환하지 않습니다.
텍스트 파일은 헤드 요청과 두 개의 새로운 라인으로 구성됩니다.

HEAD / HTTP/1.0

동일한 정보를 통해 보냅니다 에코 또는 printf 작동하지 않습니다.

$ printf "HEAD / HTTP/1.0\r\n"; |nc -n 10.1.1.2 80
$ /bin/echo -ne 'HEAD / HTTP/1.0\n\n' |nc 10.1.1.2 80

내가 잘못하고있는 아이디어가 있습니까? Bash 문제, 에코 문제 또는 Netcat 문제인지 확실하지 않습니다.

Wireshark를 통해 트래픽을 확인했고 성공적인 요청 (수동 유형)은 후행 Newline을 두 번째 패킷으로 보내는 반면 Echo, Printf 및 텍스트 파일 메소드는 Newline을 동일한 패킷에 유지하지만 어떤 원인이 있는지 잘 모르겠습니다. 이 행동.

도움이 되었습니까?

해결책

두 개의 " r n"이 필요하고 Netcat에게 응답을 기다리라고 지시해야합니다. printf "HEAD / HTTP/1.0\r\n\r\n" |nc -n -i 1 10.1.1.2 80 또는 이와 유사한 것이 작동합니다.

다른 팁

또 다른 방법은 'Heredoc'컨벤션이라고 불리는 것을 사용하는 것입니다.

$ nc -n -i 1 10.1.1.2 80 <<EOF
> HEAD / HTTP/1.0
>
> EOF

응답을 기다리는 또 다른 방법은 입력에 수면을 추가하는 것입니다. 예를 들어

(printf 'GET / HTTP/1.0\r\n\r\n'; sleep 1) | nc HOST 80

아래 NetCat 명령을 사용하여 인스턴스 웹 서버를 만들 수 있습니다.

MYIP=$(ifconfig eth0|grep 'inet addr'|awk -F: '{print $2}'| awk '{print $1}')
while true; do echo -e "HTTP/1.0 200 OK\r\n\r\nWelcome to $MYIP" | sudo nc -l -p 80 ; done&

이 라인은 또한 동일하게 작동합니다.

echo -e "HEAD / HTTP/1.1\nHost: 10.1.1.2\nConnection: close\n\n\n\n" | netcat 10.1.1.2 80
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top