2010-05-04 39 views
6

Tại sao công việc này:Sử dụng/dev/tcp thay vì wget

 
exec 3<>/dev/tcp/www.google.com/80 
echo -e "GET/HTTP/1.1\n\n">&3 
cat <&3 

Và đây không:

 
echo -e "GET/HTTP/1.1\n\n" > /dev/tcp/www.google.com/80 
cat </dev/tcp/www.google.com/80 

Có cách nào để làm điều đó trong một dòng w/o sử dụng wget , curl hoặc một số thư viện khác?

+0

Hãy coi chừng sử dụng phương pháp '/ dev/tcp' thay vì wget hoặc curl nghĩa là bạn sẽ không nhận được tất cả chức năng của wget hoặc curl - như tự động xử lý chuyển hướng 302, hỗ trợ máy chủ proxy, v.v. –

Trả lời

8

Đoạn thứ hai không thành công vì nó mở hai ổ cắm TCP riêng biệt. echo kết nối với www.google.com và viết yêu cầu HTTP; và sau đó dòng thứ hai sẽ mở ra một kết nối khác và cố đọc từ ổ cắm đó. Ổ cắm thứ hai chỉ đơn giản là chặn vì Google đang đợi yêu cầu HTTP được gửi đi.

+0

để làm cho nó hoạt động trên một dòng? – User1

+1

Tôi đã thử 20 phút, không thể làm được. Heh. Bạn có thể kết hợp ba câu lệnh thành một với '&&' nếu nó được tính là một dòng: 'exec ... && echo ... && cat ...' –

1

Không phải khu vực chuyên môn của tôi, nhưng tôi nghĩ rằng mẫu thứ hai sẽ mở một kết nối thứ hai, trong khi mẫu đầu tiên giữ một tay cầm mở cho cùng một kết nối. Vì vậy, bất kỳ giải pháp nào liên quan đến việc mở chỉ một kết nối sẽ hoạt động.

Các vấn đề liên quan