Làm thế nào để tải xuống một URL từ internet bằng netcat?


3

Tôi có thể sử dụng netcatđể chuyển tập tin giữa hai máy tính.

# Server
nc -l -p 8080 < file

# client
nc 192.168.1.101 8080 > file

Tôi có thể sử dụng netcatđể tải xuống một URL từ Internet wgetkhông?

Câu trả lời:


7

Giả sử bạn có nghĩa là một URL HTTP thông thường, điều đó là có thể nhưng nó yêu cầu bạn phải nhập thủ công Yêu cầu HTTP. Nếu URL yêu cầu POST HTTP với hình thức được mã hóa url hoặc tìm kiếm các tiêu đề cụ thể, thì điều này có thể khá cồng kềnh.

Bạn sẽ cần cung cấp Yêu cầu HTTP hợp lệ cho stdin của netcat. Ý tưởng chung là:

Thực hiện lệnh nc example.com 80

netcat sẽ bắt đầu đọc từ stdinvà bất cứ điều gì bạn nhập hoặc dán vào thiết bị đầu cuối sẽ được gửi qua mạng đến máy chủ từ xa trên cổng bạn đã chọn (80 là cổng HTTP mặc định).

Bây giờ bạn cần nhập hoặc dán yêu cầu HTTP, như:

GET / HTTP/1.1
Host: example.com
User-Agent: netcat

Cuối cùng, bạn cũng sẽ cần một số dòng mới, vì vậy hãy nhấn enter liên tục cho đến khi bạn nhận được phản hồi HTTP. Sau đó, bạn sẽ phải phân tích cú pháp bằng tay.

netcat hoạt động ở lớp TCP, do đó, mọi giao thức dựa trên HTTP về mặt kỹ thuật đều có thể được sử dụng với netcat, nhưng đối với các giao thức không phù hợp với đầu vào của con người (như ssh và https), có thể khó sử dụng nếu bạn không kịch bản nó từ một chương trình. Và nếu bạn đang viết một chương trình, tại sao bạn không sử dụng các socket TCP bình thường?

Những hạn chế của netcat cho mục đích này như sau:

  • netcat không hiểu HTTP, hoặc FTP, hoặc HTTPS hoặc SSH hoặc bất kỳ giao thức lớp ứng dụng nào khác. Bất kể tập lệnh, chương trình hoặc khóa thủ công nào bạn sử dụng, đầu vào đó sẽ phải có đủ kiến ​​thức về giao thức dây lớp ứng dụng để giao tiếp đúng với máy chủ.
  • Ngay cả các giao thức đơn giản như HTTP cũng có thể có các biến chứng đòi hỏi kiến ​​thức chi tiết về giao thức - mã hóa khối, biểu mẫu được mã hóa url, hành vi khác nhau tùy thuộc vào cookie được cung cấp, tác nhân người dùng, v.v. và HTTPS yêu cầu bắt tay SSL thành công. Tôi không biết bất cứ ai có thể tự bắt tay bằng cách bắt tay SSL chỉ bằng bộ não của họ :)
  • Vì netcat bị câm, nó không cung cấp lợi thế nào so với việc chỉ sử dụng ổ cắm TCP lập trình nếu bạn đang viết chương trình. Nếu bạn chỉ cần gõ trên thiết bị đầu cuối, việc sử dụng một chương trình hỗ trợ các giao thức lớp ứng dụng phù hợp, chẳng hạn như wget, curl, lftp, ssh, v.v. sẽ dễ dàng hơn.

1
# create a request file
$ cat req
GET / HTTP/1.1
Host: superuser.com
User-Agent: Mozilla/5.0

# send request to get response
$ nc superuser.com 80 <req >res
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.