Я пытаюсь поиграть с netcat, чтобы узнать больше о том, как работает HTTP. Я бы хотел, чтобы script часть из них в bash или Perl, но я наткнулся на камень преткновения на ранней стадии тестирования.
Если я запускаю netcat прямо из приглашения и набираю запрос HEAD, он работает, и я получаю заголовки для веб-сервера, который я просматриваю.
Это работает:
[[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] ~]$
Но когда я помещаю ту же информацию в текстовый файл и передаю ее netcat через канал или через перенаправление, при подготовке сценариев он не возвращает заголовки.
Текстовый файл состоит из запроса HEAD и двух новых строк:
HEAD / HTTP/1.0
Отправка той же информации с помощью echo или 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, и успешный запрос (вручную напечатан) отправляет конечную новую строку во втором пакете, тогда как методы echo, printf и текстовые файлы сохраняют новую строку в одном пакете, но я не что вызывает это поведение.