netcat như một máy chủ đa luồng


12

Tôi sử dụng netcat để chạy một máy chủ đơn giản như thế này:

while true; do nc -l -p 2468 -e ./my_exe; done

Bằng cách này, bất kỳ ai cũng có thể kết nối với máy chủ của tôi trên cổng 2468 và nói chuyện với "my_exe".
Thật không may, nếu ai đó muốn kết nối trong một phiên mở, nó sẽ gặp lỗi "Kết nối bị từ chối", vì netcat không còn lắng nghe cho đến vòng lặp "while" tiếp theo.

Có cách nào để làm cho netcat hoạt động giống như một máy chủ đa luồng, tức là luôn luôn lắng nghe các kết nối đến? Nếu không, có một số cách giải quyết cho điều này?


Bạn có thể sử dụng socat
sivann

Câu trả lời:


18

bạn đang sử dụng công cụ sai cho tác vụ: sử dụng cái gì đó như ucspi-tcp , đặc biệt là tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.

2
Nơi này đã là tất cả cuộc sống của tôi?!
Sridhar Sarnobat

Cảm ơn @akira, bạn có thể cung cấp ví dụ không?
Sabrina

3

Mặc dù bạn không đề cập đến hệ điều hành bạn đang sử dụng, tôi sẽ giả sử đó là Linux hoặc Unix dựa trên cú pháp của ví dụ lệnh shell của bạn.

Nếu hệ thống của bạn đang chạy xinetd (hoặc inetd tiền thân của nó ), bạn có thể sử dụng phần mềm đó để lắng nghe kết nối trên cổng bạn chọn và chạy một tệp thực thi để phản hồi. Với xinetd / inetd, bạn có tùy chọn cho phép nhiều kết nối đồng thời, mỗi kết nối được phục vụ bởi một phiên bản thực thi riêng của bạn.


-2

bạn có thể chỉ cần làm nền cho quá trình (sau đó nó không chờ đợi sự quay trở lại trước khi chuyển sang vòng lặp tiếp theo) với một '&', chẳng hạn như:

while true; do nc -l -p 2468 -e ./my_exe &; done

7
Điều đó sẽ sinh ra vô số các quy trình con và làm sập hệ thống ....
jackweirdy

5
Và, chỉ có lời mời đầu tiên sẽ hoạt động; mọi người thành công sẽ thất bại vì đã có một ổ cắm máy chủ trên cổng 2468.
Daniel Griscom
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.