Próbuję grać z netcat, aby dowiedzieć się więcej o tym, jak działa HTTP. Chciałbym napisać trochę tego w bashu lub Perlu, ale trafiłem na przeszkodę na początku testów.Skryptowanie żądania nagłówka HTTP za pomocą netcata
Jeśli uruchomię Netcat prosto z monitu i wpisz żądanie HEAD, działa i otrzymuję nagłówki dla serwera WWW, który badam.
to działa:
[[email protected] ~]$ 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 [[email protected] ~]$
Ale kiedy kładę te same informacje w pliku tekstowym i karmić go netcata przez rurę lub poprzez przekierowanie, w ramach przygotowań do skryptów, to nie zwraca nagłówki.
Plik tekstowy składa wniosek głowę i dwóch nowych linii:
HEAD/HTTP/1.0
Wysyłanie tych samych informacji poprzez echo lub printf nie działa albo.
$ 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
Jakieś pomysły, co robię źle? Nie jestem pewien, czy jest to problem z bash, problem z echa, czy z netcat.
Sprawdziłem ruch przez Wireshark, a pomyślne żądanie (ręcznie wpisane) wysyła końcową nową linię w drugim pakiecie, podczas gdy metody echo, printf i tekstowe zachowują nową linię w tym samym pakiecie, ale jestem nie wiem, co powoduje takie zachowanie.
FYI, z \ r \ n w printf jest celowe; Zmieniłem \ r \ nw różnych kombinacjach, aby zobaczyć, czy coś zmieniło - bez efektu. – romandas