Baru-baru ini saya menemukan dalam dokumentasi QNX bahwa memungkinkan untuk mengatur IPC berbasis pesan antara proses pada mesin fisik yang terpisah dengan menggunakan perangkat serial ( dev/serX
) dan itu membuat saya bertanya-tanya:
Apakah mungkin di Linux untuk membuat perangkat khusus seluruh sistem untuk terowongan TCP / UDP? Sesuatu seperti nc
stdin / stdout diekspos secara publik di bawah / dev / something.
Pada akhirnya saya ingin dapat menulis sesuatu ke file tersebut di satu mesin dan menerimanya di ujung lain misalnya:
#machine1:
echo "Hello" > /dev/somedev
#machine2:
cat < /dev/somedev
Saya melihat nc
pria tetapi saya tidak menemukan opsi untuk menentukan sumber io / tujuan selain stdio.
Jawaban:
socat
dapat melakukan ini dan banyak hal lain dengan hal-hal yang menyerupai "aliran"Sesuatu yang menggunakan ide dasar ini harus melakukannya untuk Anda:
(diadaptasi dari Halaman Contoh )
Jika Anda ingin mengenkripsi, Anda bisa menggunakan variasi
ssl-l:54321,reuseaddr,cert=server.pem,cafile=client.crt,fork
pada machine1, dan sesuatu sepertissl:server-host:1443,cert=client.pem,cafile=server.crt
pada machine2(Lebih lanjut tentang socat ssl )
sumber
Penyampaian pesan perlu diimplementasikan pada lapisan yang lebih tinggi; TCP tidak memiliki gagasan tentang pesan - koneksi TCP mentransfer aliran oktet.
Anda dapat mencapai sesuatu seperti apa yang Anda minta
nc
dan beri nama pipa , lihatman mkfifo
; atau periksasocat
seperti yang ditunjukkan Alex Stragies.Tanpa layanan lapisan tengah, masalah dasarnya adalah (1) bahwa data tidak dapat ditulis ke jaringan kecuali ada orang di ujung lain yang mendengarkannya, dan (2) bahwa koneksi TCP bersifat dua arah.
Karena Anda tidak dapat menulis data ke jaringan kecuali seseorang mendengarkannya, Anda harus selalu memulai pendengar sebelum Anda dapat mengirim data. (Dalam sistem pesan lewat proses penanganan pesan akan memberikan semacam buffering.)
Contoh Anda dapat dengan mudah ditulis ulang:
Pertama mulai pendengar di machine2 (tujuan):
Dalam contoh Anda, ini akan menjadi
Ini akan memblokir dan menunggu seseorang mengirim beberapa data ke port 1234.
Kemudian Anda dapat mengirim beberapa data dari machine1 (sumber):
Dalam contoh Anda, ini akan menjadi
Jika Anda ingin memproses data yang diterima dengan cara tertentu dan meresponsnya, Anda dapat menggunakan fasilitas pemrosesan shell. Sebagai contoh, ini adalah server web yang sangat sederhana (dan sangat keras kepala):
Lihat bagaimana komunikasi dua arah dicapai antara badan utama skrip dan proses-proses menggunakan deskriptor file dalam array
$ncfd
.sumber
cat
singkatan dari "beberapa proses membaca untuk stdin".Jika Anda hanya ingin menghubungkan dua komputer menggunakan program dasar seperti nc Anda dapat mengalihkan dari / ke
/dev/tcp/<host>/<port>
.Ini bukan perangkat yang sebenarnya tetapi sebuah fiksi yang dibuat oleh bash, jadi hal-hal seperti
cat /dev/tcp/foo/19
tidak akan berfungsi, tetapicat < /dev/tcp/foo/19
akan.sumber