Dapatkah saya mem-pipe / mengarahkan kembali aplikasi konsol melalui netcat sehingga dapat digunakan dari jarak jauh?

10

Apakah mungkin untuk 'mem-pipe' instance aplikasi konsol melalui netcat, sehingga netcat mendengarkan koneksi baru dan mengarahkan ulang stdindan stdoutmelalui koneksi jaringan.

jammmie999
sumber
ya tetapi mungkin harus menjadi satu liner, yang baik-baik saja, pipa memang demikian. Saya tidak tahu apakah Anda dapat memberitahu nc dan pipa ke instance yang sudah berjalan oleh pid. Anda dapat nc ke ip dan pipa ke nc yang mendengarkan dan pipa itu ke nc yang mendengarkan dll dan pipa yang ke nc ke ip.
barlop
Saya mengubah judul karena apa yang Anda sebutkan terdengar lebih seperti pengalihan I / O daripada penggunaan pipa (yang hanya berurusan dengan memindahkan output dari satu proses ke input yang lain).
Terobosan
@Breakthrough, apa bedanya dengan pipa? karena dia berbicara tentang pengalihan IO dan tidak berbicara tentang file, lalu apa bedanya dengan perpipaan?
barlop
Pengalihan @barlop I / O ( <atau >) secara signifikan berbeda dari pemipaan ( |), meskipun Anda terkadang dapat mencapai operasi yang setara dengan campuran keduanya. Sekali lagi, dengan pengalihan I / O, Anda dapat mengubah lokasi kedua aliran; perpipaan hanya mengalihkan output standar dari satu proses ke input standar yang lain.
Terobosan
@Breakthrough lihat apa yang saya minta. > dan <tentu saja berbeda dari pemipaan karena <dan> menggunakan file. Tapi dia tidak berbicara tentang file. Saya bertanya kepada Anda "bagaimana perbedaan [pengalihan IO] dari pipa? Karena ia berbicara tentang pengalihan IO dan tidak berbicara tentang file, lalu bagaimana perbedaannya dari pemipaan?"
barlop

Jawaban:

16

Nah, seperti yang didokumentasikan dalam Wikipedia dan netcatdokumentasi, ada -eopsi yang menyebabkannya menelurkan ( e xecute) program setelah menerima koneksi, melampirkan soket ke stdin, stdout, dan stderr dari proses. Contoh penggunaan:

nc -l -pport_number -eprogram_name

Contoh umum menunjukkan /bin/shatau bashdigunakan sebagai program_name . Penggunaan opsi ini tidak disarankan karena pada dasarnya membuka portal akses anonim dan tanpa kata sandi ke mesin Anda. Tentu saja, ini dikurangi dengan menggunakan program dengan daya yang lebih kecil dari shell (yang tidak memiliki kemampuan untuk melarikan diri ke shell), meminimalkan penggunaan Anda, dan merahasiakannya. Meskipun demikian, pengembang asli netcatmerasa cukup kuat bahwa opsi ini adalah ide yang buruk bahwa mereka menonaktifkannya secara default, dan mengkondisasinya di bawah opsi kompilasi "GAPING_SECURITY_HOLE". Ini disebutkan secara singkat dalam Tutorial NetCat ini dan netcatdokumentasi lainnya .

Pencarian Google membawa saya ke diskusi tentang masalah ini di situs Stack Exchange lainnya: Stack Overflow dan Server Fault . Banyak kontributor menawarkan teknik berikut untuk melakukan hal yang sama tanpa menggunakan -eopsi (yaitu, dalam versi netcatyang memiliki -eopsi dinonaktifkan):

Di server:
mkfifopipe_name
nc -l -pport_number <pipe_name   | program_name >pipe_name

Pada klien:
nc server_machine_name  port_number

Beberapa catatan:

  • Pada beberapa versi netcat, -ltersirat -p, jadi Anda harus mengatakan adil -ldan kemudian nomor port.
  • Anda mungkin ingin membungkus solusi Anda dalam satu while truelingkaran.
Scott
sumber