Tôi đang cố gắng thử nghiệm với netcat để tìm hiểu thêm về cách hoạt động của HTTP. Tôi muốn kịch bản một số trong nó trong bash hoặc Perl, nhưng tôi đã đánh vào một khối vấp ngã sớm trong thử nghiệm của tôi.Thực hiện yêu cầu tiêu đề HTTP với netcat
Nếu tôi chạy netcat ngay từ dấu nhắc và nhập yêu cầu HEAD, nó hoạt động và tôi nhận được tiêu đề cho máy chủ web tôi đang thăm dò.
này hoạt động:
[[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] ~]$
Nhưng khi tôi đặt cùng một thông tin vào một tập tin văn bản và thức ăn cho netcat thông qua một đường ống hoặc qua chuyển hướng, để chuẩn bị cho kịch bản, nó không trả lại các tiêu đề.
Các tập tin văn bản bao gồm các yêu cầu HEAD và hai dòng mới:
HEAD/HTTP/1.0
gửi cùng một thông tin qua vang hoặc printf không hoạt động hoặc.
$ 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
Bất kỳ ý tưởng nào tôi đang làm sai? Không chắc chắn nếu đó là một vấn đề bash, một vấn đề echo, hoặc một vấn đề netcat.
Tôi đã kiểm tra lưu lượng truy cập qua Wireshark và yêu cầu thành công (được nhập thủ công) gửi dòng mới trong gói thứ hai, trong khi phương thức echo, printf và văn bản giữ dòng mới trong cùng một gói, nhưng tôi không chắc chắn nguyên nhân gây ra hành vi này.
FYI, các \ r \ n trong printf là có mục đích; Tôi chuyển giữa \ r và \ n trong các kết hợp khác nhau để xem nó có thay đổi gì không - không có hiệu lực. – romandas