Cách UCSPI-TCP
Có bộ công cụ khác ngoài netcat. Dưới đây là cách sử dụng một vài trong số chúng. Tất cả đều cho rằng sự tồn tại của một servicetập lệnh chạy của bạn func, bất cứ điều gì có thể là:
#! / thùng / sh
trong khi đọc -r TIN NHẮN
làm
echo 1> & 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {TIN NHẮN}"
func
làm xong
Các biến TCPREMOTEIPvà TCPREMOTEPORTmôi trường được xác định bởi giao thức UCSPI-TCP.
Tập lệnh được sinh ra dưới dạng một quy trình riêng lẻ trên mỗi kết nối TCP bằng các bộ công cụ khác nhau. Trong phần tiếp theo, các công cụ được hiển thị như được sử dụng trong một tập lệnh ngắn. Một kịch bản như vậy, được đặt tên theo quy ước run, là cách người ta điều hành chúng dưới một người quản lý dịch vụ gia đình daemontools. Họ tất nhiên có thể được gọi trực tiếp.
Bernstein ucspi-tcp
Với ucspi-tcp của Daniel J. Bernstein, tcpserversinh ra servicekịch bản:
#! / bin / sh -e
exec tcpserver -v -P -R -H -l 0 0.0.0.0 7777 ./service
Có các phiên bản nâng cao có khả năng IPv6 của Bernstein ucspi-tcp. Với Erwin Hoffman, các tcpservernỗ lực xử lý cả IPv4 và IPv6 trong một (nếu hệ điều hành hỗ trợ điều này, một số thì không) và sinh ra servicetập lệnh:
#! / bin / sh -e
exec tcpserver -v -P -R -H -l 0 :: 0 7777 ./service
Bercot s6-mạng, s6 và thực thi
Với kết nối mạng s6 của Laurent Bercot s6-tcpserver4và s6-tcpserver6xử lý riêng IPv4 và IPv6 và tạo ra servicetập lệnh:
#! / lệnh / execlineb
s6-tcpserver4 -v 0.0.0.0 7777
./dịch vụ
#! / lệnh / execlineb
s6-tcpserver6 -v :: 0 7777
./dịch vụ
Người ta có thể xây dựng các máy chủ phức tạp hơn bằng cách thay thế các công cụ như s6-tcpserver-accessvà s6-applyuidgidtrong chuỗi ngay trước đó ./service.
công cụ UCSPI
Với bộ công cụ nosh, tcp-socket-listenlắng nghe trên ổ cắm TCP, một lần nữa xử lý IPv4 và IPv6 một cách tự động nếu hệ điều hành hỗ trợ làm như vậy và các chuỗi sẽ tcp-socket-acceptlần lượt tạo ra servicetập lệnh:
#! / bin / nosh
tcp-socket-lắng nghe --combine4and6 :: 7777
tcp-socket-accept --verbose --localname 0
./dịch vụ
Hoặc một chạy hai quy trình riêng biệt, trên các hệ điều hành như OpenBSD:
#! / bin / nosh
tcp-socket-lắng nghe 0.0.0.0 7777
tcp-socket-accept --verbose --localname 0
./dịch vụ
#! / bin / nosh
tcp-socket-lắng nghe: 7777
tcp-socket-accept --verbose --localname ::
./dịch vụ
Người ta có thể xây dựng các máy chủ phức tạp hơn bằng cách thay thế các công cụ như ucspi-socket-rules-checkvà setuidgidtrong chuỗi.
#! / bin / nosh
tcp-socket-lắng nghe --combine4and6 :: 7777
setuidgid không được ưu tiên người dùng
tcp-socket-accept --verbose --localname 0
ucspi-socket-quy tắc-kiểm tra --verbose
./dịch vụ
Pape ipsvd
Với ipsvd của Gerrit Pape, tcpsvdsinh ra servicekịch bản:
#! / bin / sh -e
thực hiện tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
serviceKịch bản chung có thể xử lý khi đầu vào tiêu chuẩn là một ổ cắm luồng . Nhưng bạn đã không chỉ định rõ ràng TCP.
Mặc dù một số bộ công cụ đã nói ở trên có thể được sử dụng để xây dựng các máy chủ UDP theo cách tương tự như cách người ta có thể sử dụng chúng để xây dựng các máy chủ TCP (cf udp-socket-listenin nosh), thật khó để xây dựng chương trình dịch vụ thực tế với tập lệnh shell, vì các hàm dựng của shell không nhất thiết phải đối phó tốt khi đầu vào tiêu chuẩn là một ổ cắm datagram .
đọc thêm
- Giao thức:
- bộ công cụ:
- Daniel J. Bernstein. ucspi-tcp . cr.yp.to.
- s6-mạng . Laurent Bercot. skarnet.org.
- s6 . Laurent Bercot. skarnet.org.
- Jonathan de Boyne Pollard (2016). quà vặt . Phần mềm.
- ipsvd . Gerrit Pape. smarden.org.
- tài liệu tham khảo: