Viết cho stdin của một tiến trình đang chạy với cùng tác dụng / hành vi của việc viết trực tiếp


8

Đây bài trả lời chỉ một phần câu hỏi của tôi. Vấn đề của tôi là việc ghi vào stdin của tiến trình đang chạy bằng cách sử dụng FD của tiến trình trên hệ thống tập tin / Proc không có tác dụng tương tự.

Vấn đề:

  1. bắt đầu nc để nghe trên cổng 10000 (quá trình này được gọi là nc 1)

    nc -l 10000
    
  2. bắt đầu một nc khác để gửi ký tự đến nc nghe (đây sẽ là nc 2)

    nc localhost 10000
    
  3. Viết cho stdin trên nc 2

    echo "some chars here" >> /proc/[PID-nc-2]/fd/0
    

vấn đề: "một số ký tự ở đây" không được nghe nc (nc 1), NHƯNG được hiển thị trên bảng điều khiển của nc 2.

Câu hỏi: tại sao và có thể làm cho nó hoạt động?

Câu trả lời:


11

Điều này không hoạt động như bạn mong đợi bởi vì /proc/<PID>/fd/0không phải là một đường ống. Nếu bạn gọi bên gửi với stdin được kết nối với đường ống, nó sẽ hoạt động

Trên máy chủ nhận

nc -l 10000

Trên máy chủ gửi

mkfifo my.fifo
cat >my.fifo &
cat my.fifo | nc remotehost.tld 10000

Bây giờ bạn có thể

echo "Hello World" >my.fifo
myprog >my.fifo

Lưu ý rằng cat >my.fifocần phải giữ fifo mở nếu không EOF sẽ được gửi và kết nối bị đóng sớm. Để đóng kết nối xuống, bạn cần phải giết tiến trình con mèo đang giữ fifo mở.


Rất hữu ích! Trong trường hợp của tôi, điều này thực sự giúp giao tiếp với một quá trình dễ dàng hơn bởi vì fifo perm có thể cho phép người dùng bình thường ảnh hưởng đến tập lệnh sudo'ne.
natevw

1

Như đã nêu trong câu trả lời cho bài đăng bạn liên kết, bạn cần phải viết thư /proc/pid/fd/0, không /proc/pid/fd/1.


1
Tôi đã sửa câu hỏi của mình. Nhưng dù sao: tôi đã thử cả / fd / 0 và / fd / 1. Câu hỏi vẫn còn ...
Geo

tôi đã thử điều này, nhưng đối mặt với vấn đề nhỏ. Nó không đăng tên miền cần thiết lên telnet, nhưng tôi nghĩ rằng nó đòi hỏi một số loại trở lại vận chuyển hoặc ký tự dòng mới, mà tôi không thể chuyển qua nó
Farhan
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.