echo command | netcat host port
Ini menghasilkan perintah yang dikirim ke host jarak jauh dan beberapa data dibaca kembali. Tetapi setelah beberapa detik, koneksi ditutup. Parameter -w tidak mengubah apa pun. Saya menggunakan netcat v1.10 pada SuSE 10.1.
Jawaban:
Ini berfungsi dengan
nc
perintah pada OS X (dengan asumsi perintah yang ingin Anda kirim ada dalam file):(Pada dasarnya,
cat
membuang isi file di stdout dan kemudian menunggu Anda di stdin).Dengan ekstensi, jika Anda ingin mengirim perintah dari shell itu sendiri, Anda bisa melakukan ini:
sumber
{ echo command; cat;}
akan melakukan hal yang sama, dan mungkin dianggap lebih mudah dimengerti.netcat
perintah akan menahan soket terbuka sampai ia melihat akhir input. Semua contoh ini menunjukkan ini tanpa benar-benar mengatakan banyak tentang mengapa . Saya berinteraksi dengan server yang menggunakan untuk jangka hanya menggunakan: . SocketTest adalah alat praktis yang dapat mendengarkan atau melayani pada port TCP atau UDP.SocketTest
netcat
cat - | nc localhost 8063
Dengan
nc
di Ubuntu:Dari halaman manual Ubuntu
nc
:Perhatikan bahwa
nc
opsi yang tersedia sangat bervariasi antar distribusi, jadi ini mungkin tidak bekerja pada Anda (OpenSUSE).sumber
Aku menemukannya:
Rekan kerja saya tahu itu. Saya tidak melihat itu di dokumentasi sama sekali.
sumber
Saya tidak berpikir Anda akan mengelola ini dengan netcat atau socat. Saya baru saja melakukan mengutak-atik keduanya, dan socat tampak paling menjanjikan.
Saya berhasil mengatur socat untuk terhubung ke port TCP jarak jauh dan mendengarkan pada soket domain unix lokal (secara teori sehingga tautan dapat terus terjaga sepanjang waktu) tetapi segera setelah proses lokal dilepaskan dari soket unix (socat lain menghubungkan soket unix ke stdin / out) menutup sesi TCP socat.
Masalahnya di sini adalah bahwa setiap koneksi melalui netcat / socat membuat koneksi aliran TCP baru ke server, dan menutup sesi aliran TCP ketika ujung lokal terputus.
Saya pikir Anda mungkin harus menulis beberapa perangkat lunak proxy khusus untuk ini yang membuka koneksi TCP ke ujung jarak jauh dan kemudian mendengarkan secara lokal pada soket / pipa / fifo atau apa pun dan kemudian hanya mengirim data ke pipa TCP yang ada dan mengembalikan hasilnya.
sumber
Mungkinkah koneksi ditutup di ujung soket yang lain?
Secara default,
nc
tutup koneksi setelah selesai, jika Anda tidak secara eksplisit memintanya untuk tetap mendengarkan (dengan-k
opsi):Lihat
man nc.1
.Saya berhasil mengalirkan data antara dua mesin seperti ini:
pengirim:
penerima:
sumber
Metode Georges bekerja dengan baik dari shell interaktif, tetapi tidak akan membantu dengan skrip, ketika Anda misalnya memanggil skrip Anda sebagai
nohup ./script &
.Saya menemukan mengganti stdin dengan fifo boneka membantu.
Karena tidak ada yang pernah menulis ke fifo, setelah mengeluarkan file,
cat
menggantungnya tanpa batas.sumber
socat
'sshut-none
pilihan harus membantu di sini:Anda mungkin juga perlu mengganti periode batas waktu default menggunakan
-t <timeout>
, jika tidak, soket akan ditutup setelah 0,5s. Opsi ini mengesampingkan perilaku default, yaitu:Jadi, sebuah perintah seperti:
akan menjaga soket terbuka selama 10 detik setelah mengirim 'bla'.
sumber
Perintah Anda berakhir, jika host jarak jauh menutup koneksi (atau tidak dapat dijangkau) atau perintah sebelum pipa diakhiri (sementara netcat masih mengirim sisa antrian inputnya).
sumber