Saya memiliki dua proses Linux yang berkomunikasi melalui pipa tanpa nama. Bagaimana bisa memonitor lalu lintas di pipa? Bagaimana saya bisa menyuntikkan data ke dalam pipa? Saya memiliki akses root dan tahu inode pipa.
Pipa tanpa nama pada dasarnya bersifat pribadi untuk aplikasi yang memiliki deskriptor file. Tidak ada cara berprinsip untuk mengamati atau memodifikasi lalu lintas di pipa. Saya juga tidak berpikir ada cara untuk melihat pipa secara langsung di Linux.
Ada cara yang tidak berprinsip untuk melakukan kurang lebih apa yang Anda kejar: melalui panggilan sistem ptrace . Anda tidak akan menempel ke pipa per se, tetapi ke salah satu proses. Untuk pengamatan, gunakan strace , mis
strace -p1234 -s99999 -e write
di mana 1234
ID proses dari proses yang menulis di pipa. Memodifikasi data lebih sulit, tetapi bisa dilakukan. Saya pikir cara termudah adalah dengan terlebih dahulu mengatur proses perantara yang menyalin input standarnya ke output standar, ditambah data yang ingin Anda masukkan (dan minus semua data yang ingin Anda tekan). Buat dua pipa bernama dan mulai proses menengah dengan stdin di satu pipa dan stdout di yang lain. Kemudian gunakan debugger (misalnya GDB ) untuk membuat kedua proses target dieksekusi open
pada pipa bernama yang sesuai, kemudian dup
untuk menempatkan pipa pada deskriptor file yang sesuai. Perhatikan bahwa ada kemungkinan Anda akan menabrak salah satu proses dalam proses.
(Jika Anda tidak mengerti paragraf terakhir, saya minta maaf, tetapi memang membutuhkan tingkat teknis tertentu. Saya tidak berpikir ada cara yang lebih mudah.)
Beberapa alat yang berguna untuk memonitor pipa:
Tee Penampil Pipa
Untuk program yang sudah berjalan di mana orang tidak mengontrol pipa, lihat metode gdb:
Mengarahkan Output dari Proses Menjalankan .
Atau seseorang dapat menggunakan strace :
hanya menampilkan panggilan deskriptor 1. "2> & 1" adalah untuk mengarahkan ulang stderr ke stdout, seperti strace yang menulis ke stderr secara default.
sumber