2014-06-13 19 views
9

có câu hỏi nhanh.thời gian chờ netcat không hoạt động?

Tại sao lệnh netcat sau đây không hết thời gian nếu nỗ lực kết nối mất nhiều hơn 3 giây (ví dụ: khi cổng không mở)? Tôi cho rằng lá cờ -w sẽ là thứ tôi cần. Hệ điều hành OSX 10.9.

nc -v -z -w 3 127.0.0.1 5050

Giả sử mà làm việc, tôi đã lên kế hoạch thực hiện như thế này (không chắc chắn nếu điều này sẽ làm việc, tổng Noob bash)

nc -v -z -w 3 127.0.0.1 5050 | /dev/null && echo "Online" || echo "Offline"

Cheers cho bất kỳ sự giúp đỡ!

+0

Khi tôi thử, tôi ngay lập tức nhận được phản hồi lỗi vì cổng không mở. Bạn có chắc chắn nó không mở trên máy chủ của bạn? Nếu có, thì đó là lý do tại sao nó không phải là thời gian ra, bởi vì nó thực sự kết nối. – CDahn

+0

Thật kỳ lạ, nó dường như chỉ xuất hiện trên một cổng cụ thể ... Tôi đã cố gắng sử dụng nó để theo dõi xem một dịch vụ cụ thể có đang chạy trên máy của tôi từ một vị trí hoặc mạng từ xa hay không. Dịch vụ đó hiện không chạy, nhưng netcat dường như không hết thời gian, quá trình này chỉ bị treo. Có suy nghĩ gì không? – anditpainsme

+0

Bạn có đang chạy bất kỳ loại tường lửa nào không? "Iptables -L" hiển thị cho bạn những gì? – CDahn

Trả lời

15

Bạn cần chuyển hướng đến/dev/null, không phải đường dẫn đến nó. Hãy thử như sau:

nc -v -z -w 3 127.0.0.1 5050 &> /dev/null && echo "Online" || echo "Offline" 

Trên máy tính của tôi, cổng 5050 không mở, và tôi nhận được như sau:

$ nc -v -z -w 3 localhost 5050 &> /dev/null && echo "Online" || echo "Offline" 
Offline 
+1

Cảm ơn vì điều đó! Trong tò mò tại sao là & cần thiết khi chuyển hướng? – anditpainsme

+1

nc kết xuất đầu ra chi tiết thành stderr, vì vậy nếu bạn chỉ muốn xem "Trực tuyến" và "Ngoại tuyến", bạn cần sử dụng &> để báo cho bash chuyển hướng cả stdout và stderr đến/dev/null. Nếu bạn loại bỏ v, bạn chỉ có thể nói nc -z -w 3 localhost 5050 && echo "Online" || echo "Offline" – CDahn

+0

Tuyệt, rất hay. Cảm ơn. – anditpainsme

3

Có một báo cáo lỗi cũ về vấn đề này trên debian (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=97583) và vẫn có hành vi tương tự trong Debian GNU/Linux 7,7 (khò khè)

tôi tìm thấy một "giải pháp" này: cài đặt phiên bản OpenBSD của nc:

apt-get install netcat-openbsd 
Các vấn đề liên quan