Tôi muốn một máy chủ echo UDP nhận các gói và trả lời chính xác những gì nó đã nhận được. Làm thế nào tôi có thể đơn giản làm điều này bằng cách sử dụng netcat
hoặc socat
? Nó sẽ tồn tại mãi mãi và xử lý các gói đến từ một số máy chủ.
Tôi muốn một máy chủ echo UDP nhận các gói và trả lời chính xác những gì nó đã nhận được. Làm thế nào tôi có thể đơn giản làm điều này bằng cách sử dụng netcat
hoặc socat
? Nó sẽ tồn tại mãi mãi và xử lý các gói đến từ một số máy chủ.
Câu trả lời:
Một công cụ giống như netcat khác là phiên bản nmap ncat
, có rất nhiều tính năng được tích hợp sẵn để đơn giản hóa những thứ như thế này. Điều này sẽ làm việc:
ncat -e /bin/cat -k -u -l 1235
-e có nghĩa là nó thực thi / bin / cat (để lặp lại những gì bạn gõ)
-k có nghĩa là tiếp tục sống, rằng nó tiếp tục lắng nghe sau mỗi kết nối
-u có nghĩa là udp
-l 1235 có nghĩa là nó nghe trên cổng 1235
Tôi đã từng socat -v PIPE udp-recvfrom:5553,fork
chạy máy chủ và socat - udp:localhost:5553
cho khách hàng.
Đây là một sự trợ giúp tuyệt vời!
socat TCP4-LISTEN:2000,fork EXEC:cat
Bạn cũng có thể sử dụng socat (thay vì sử dụng netcat) làm máy chủ echo và netcat làm máy khách.
Máy chủ tiếng vang Socat (nghe trên cổng TCP 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Máy khách Netcat (kết nối với serverip trên cổng TCP 1234):
nc serverip 1234
Bạn có thể viết một chương trình C mà dĩa nc -u -l -p 4321
và sau đó sử dụng dup (2) để kết nối:
Sau đó, trong một vòng lặp vô tận, cha mẹ đọc từ stdin và viết trong thiết bị xuất chuẩn bất cứ điều gì cha mẹ đọc.
socat -v PIPE UDP-LISTEN:5555,fork
, nhưng kết nối thứ hai bị từ chối. Nhân tiện, nó hoạt động tốt với TCP-LISTEN. Tôi đang tránh viết mã, nếu không tôi có thể viết tất cả bằng C.
Nếu bạn đang chạy trên Windows và sử dụng một môi trường unix như cygwin, netcat Migth không cung cấp tham số -e. Điều này làm việc tốt cho tôi.
netcat
giải pháp được cài đặt sẵn trong Ubunutu
Bản netcat
cài đặt sẵn trong Ubuntu 16.04 đến từ netcat-openbsd
và không có -c
tùy chọn nào , nhưng hướng dẫn sử dụng đưa ra giải pháp:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
Sau đó, ví dụ khách hàng:
echo abc | netcat localhost 8000
TODO: làm thế nào để sửa đổi giá trị chuỗi đầu vào? Sau đây không trả lại bất kỳ trả lời:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
Ví dụ shell từ xa hoạt động:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
Tuy nhiên, tôi không biết làm thế nào để giải quyết các yêu cầu đồng thời.