Vâng, như được ghi lại trong Wikipedia và netcat
tài liệu, có một -e
tùy chọn khiến nó sinh ra ( e xecute) một chương trình khi nhận được kết nối, gắn ổ cắm vào stdin, stdout và stderr của quá trình. Ví dụ sử dụng:
nc -l -p
port_number -e
program_name
Các ví dụ thường thấy /bin/sh
hay bash
được sử dụng như là program_name . Việc sử dụng tùy chọn này không được khuyến khích vì về cơ bản nó sẽ mở một cổng truy cập ẩn danh, không mật khẩu vào máy của bạn. Tất nhiên, điều này được giảm thiểu bằng cách sử dụng một chương trình có ít năng lượng hơn vỏ (chương trình không có khả năng thoát khỏi vỏ), giảm thiểu việc bạn sử dụng nó và giữ bí mật. Tuy nhiên, các nhà phát triển ban đầu netcat
cảm thấy đủ mạnh mẽ rằng tùy chọn này là một ý tưởng tồi mà họ đã vô hiệu hóa nó theo mặc định và điều chỉnh nó theo tùy chọn biên dịch của GAPING_SECURITY_HOLE. Điều này được đề cập ngắn gọn trong Hướng dẫn NetCat này và các netcat
tài liệu khác .
Một tìm kiếm của Google đã đưa tôi đến các cuộc thảo luận về vấn đề này trên các trang web Stack Exchange khác: Stack Overflow và Server Fault . Nhiều người đóng góp đã cung cấp kỹ thuật sau đây để làm điều tương tự mà không cần sử dụng -e
tùy chọn (nghĩa là trong phiên bản netcat
có -e
tùy chọn bị tắt):
Trên máy chủ:
mkfifo
pipe_name
nc -l -p
port_number <
pipe_name |
program_name >
pipe_name
Trên máy khách:
nc
server_machine_name
port_number
Một vài lưu ý:
- Trên một số phiên bản
netcat
, -l
ngụ ý -p
, vì vậy bạn chỉ nên nói -l
và sau đó là số cổng.
- Bạn có thể muốn bọc giải pháp của bạn trong một
while true
vòng lặp.