Làm cách nào để tự động đóng kết nối netcat sau khi dữ liệu được gửi?


22

Tôi đang thực hiện lệnh sau từ một kịch bản:

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

Tuy nhiên, khách hàng netcat vẫn mở vô thời hạn. Làm cách nào để đóng kết nối sau khi dữ liệu này được gửi?

Câu trả lời:


17

Cả hai câu trả lời khác -c-qđược đưa ra đều đúng trong ngữ cảnh phù hợp, nhưng nó có thể giúp tóm tắt lý do tại sao có nhiều câu trả lời và đưa ra một giải pháp tổng quát hơn.

Các tùy chọn khác nhau này làm cùng một việc nhưng là các triển khai khác nhau của netcat:

  • -c GNU triển khai netcat
  • -q OpenBSD thực hiện netcat.
  • -w (khác?) Thực hiện OpenBSD của netcat.

Một số phiên bản yêu cầu int để chỉ định số giây chờ trước khi thoát khỏi các tùy chọn -q-w. Int này phải > 0hoặc >= 0, tùy thuộc vào phiên bản.

Nếu bạn đang triển khai một cái gì đó trên nhiều máy và không chắc chắn chúng sử dụng cùng một cách thực hiện netcat, bạn có thể xem xét kết thúc cuộc gọi netcat của mình với timeoutchương trình để giết netcat sau vài giây.

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

Cách tiếp cận này hơi vụng về vì nó đặt giới hạn trên cho việc thực thi netcat bất kể có gửi dữ liệu thành công hay không, nhưng nếu bạn đang gửi một lượng nhỏ dữ liệu và có vài giây dự phòng thì việc này sẽ hiệu quả với bất kỳ thực hiện netcat.


5

Bạn có thể sử dụng -qtham số, nhưng nó cũng sẽ khiến netcatmáy chủ bị đóng.

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    

3

Trong trường hợp của tôi, bản sao netcat mà tôi đang sử dụng trên máy Mac được cài đặt qua Homebrew (v 0.7.1) không có tùy chọn -q, nhưng tôi đã có thể sử dụng tùy chọn -c để đóng trên STDIN EOF và đặt toàn bộ lệnh trong một vòng lặp:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done

1

Trên máy chủ Ubuntu 18.04 tôi phải sử dụng như sau: (tìm thấy trong trang man)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

Rõ ràng -Nlà tương tự -qhoặc -ctrên các bản phát hành khác

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.