Menulis ke stdin dari proses yang berjalan dengan efek / perilaku yang sama menulis langsung

8

Posting ini hanya menjawab sebagian pertanyaan saya. Masalah saya adalah bahwa menulis ke stdin dari proses yang berjalan menggunakan FD proses pada sistem file / proc tidak memiliki efek yang sama.

Masalah:

  1. mulai nc untuk mendengarkan pada port 10000 (proses ini disebut lanjut nc 1)

    nc -l 10000
    
  2. mulai nc lain untuk mengirim karakter ke nc yang mendengarkan (ini akan menjadi nc 2)

    nc localhost 10000
    
  3. Tulis ke stdin di nc 2

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

masalah: "beberapa karakter di sini" tidak sampai ke nc mendengarkan (nc 1), TAPI ditampilkan pada konsol nc 2.

Pertanyaan: mengapa dan apakah mungkin untuk membuat ini berfungsi?

Geo
sumber

Jawaban:

11

Ini tidak berfungsi seperti yang Anda harapkan karena /proc/<PID>/fd/0itu bukan pipa. Jika Anda memanggil sisi pengirim dengan stdin yang terhubung ke sebuah pipa, ia akan berfungsi

Di host penerima

nc -l 10000

Di host pengirim

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

Sekarang kamu bisa

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

Perhatikan bahwa cat >my.fifodiperlukan untuk menjaga fifo tetap terbuka jika EOF dikirim dan koneksi ditutup sebelum waktunya. Untuk menutup koneksi, Anda perlu membunuh proses kucing yang memegang fifo terbuka.

user9517
sumber
Sangat membantu! Dalam kasus saya ini sebenarnya membuatnya lebih mudah untuk berkomunikasi dengan suatu proses karena fifo perms dapat memungkinkan pengguna normal untuk mempengaruhi skrip sudo'ne.
natevw
1

Seperti yang dinyatakan dalam jawaban untuk posting yang Anda tautkan, Anda perlu menulis /proc/pid/fd/0, bukan /proc/pid/fd/1.

Michael Hampton
sumber
1
Saya mengoreksi pertanyaan saya. Tetapi bagaimanapun juga: Saya mencoba / fd / 0 dan / fd / 1. Pertanyaannya tetap ...
Geo
Saya sudah mencoba ini, tetapi menghadapi sedikit masalah. itu posting domain yang diperlukan untuk telnet, tetapi saya pikir itu memerlukan semacam carriage return atau karakter baris baru, yang saya tidak dapat meneruskannya
Farhan