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 service
tậ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 TCPREMOTEIP
và TCPREMOTEPORT
mô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, tcpserver
sinh ra service
kị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 tcpserver
nỗ 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 service
tậ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-tcpserver4
và s6-tcpserver6
xử lý riêng IPv4 và IPv6 và tạo ra service
tậ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-access
và s6-applyuidgid
trong chuỗi ngay trước đó ./service
.
công cụ UCSPI
Với bộ công cụ nosh, tcp-socket-listen
lắ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-accept
lần lượt tạo ra service
tậ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-check
và setuidgid
trong 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, tcpsvd
sinh ra service
kịch bản:
#! / bin / sh -e
thực hiện tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
service
Kị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-listen
in 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: