Cara Membaca Data Dari Soket di Bash di Linux

Diterbitkan: 2022-06-28
Kode biner mengalir melalui kabel optik.
XYZ/Shutterstock.com

Baris perintah Linux memungkinkan Anda mengambil data dengan mendengarkan di soket atau menghubungkan ke soket. Data dapat ditangkap dalam file teks. Kami tunjukkan caranya.

Soket Klien dan Server

Soket memungkinkan perangkat lunak jaringan untuk berkomunikasi. Mereka pertama kali diimplementasikan dalam sistem operasi Unix 4.2BSD, yang dibuat di University of California, Berkeley, pada tahun 1983. Mereka dengan cepat diadopsi oleh System V Unix dan Microsoft Windows.

Apa Arti "Semuanya Adalah File" di Linux?
TERKAIT Apa Arti "Semuanya Adalah File" di Linux?

Soket adalah titik akhir koneksi jaringan perangkat lunak, diabstraksikan sehingga dapat diperlakukan sebagai pegangan file. Itu berarti cocok dengan prinsip desain umum Unix dan Linux "semuanya adalah file." Kami tidak bermaksud soket fisik di dinding tempat Anda menyambungkan kabel jaringan Anda.

Jika sebuah program terhubung ke soket pada perangkat lunak lain, itu dianggap sebagai klien dari perangkat lunak lain. Perangkat lunak yang memungkinkan perangkat lunak lain untuk meminta koneksi disebut server . Istilah-istilah ini digunakan secara independen dari penggunaan lain dari klien dan server di dunia TI. Untuk menghindari kebingungan mereka kadang-kadang disebut soket klien dan server soket untuk menghilangkan ambiguitas. Kami akan menyebutnya klien dan server.

Soket diimplementasikan sebagai antarmuka pemrograman aplikasi (API), memungkinkan pengembang perangkat lunak untuk memanggil fungsionalitas soket dari dalam kode mereka. Tidak apa-apa jika Anda seorang programmer, tetapi bagaimana jika bukan? Atau mungkin memang demikian, tetapi kasus penggunaan Anda tidak menjamin penulisan aplikasi? Linux menyediakan alat baris perintah yang memungkinkan Anda menggunakan server soket dan klien soket dasar, sesuai dengan kebutuhan Anda, untuk mengambil atau menerima data dari proses lain yang mendukung soket.

TERKAIT: Apa itu API, dan Bagaimana Pengembang Menggunakannya?

Hubungan Tidak Pernah Mudah

Program yang akan kita gunakan adalah nc dan ncat . Kedua utilitas ini memiliki hubungan yang aneh. Program nc adalah penulisan ulang ncat , yang jauh lebih tua dari nc . Tapi ncat telah ditulis ulang juga, dan sekarang memungkinkan kita melakukan beberapa hal yang tidak bisa dilakukan nc . Dan ada banyak implementasi dari ncat , yang merupakan turunan dari alat yang disebut netcat . Selain itu, pada sebagian besar distribusi, nc adalah tautan simbolis ke ncat dan bukan program terpisah.

Kami memeriksa distribusi Arch, Manjaro, Fedora, dan Ubuntu terbaru. Satu-satunya yang membutuhkan alat untuk diinstal adalah Manjaro. Di Manjaro, Anda perlu menginstal paket netcat untuk mendapatkan nc , tetapi Anda tidak mendapatkan ncat , Anda mendapatkan netcat . Dan di Manjaro, nc adalah tautan simbolis ke netcat .

 sudo pacman -S netcat 

Menginstal paket netcat di Manjaro

Intinya adalah, di Manjaro gunakan netcat ketika Anda melihat ncat pada contoh di artikel ini.

Mendengarkan di Soket

Jika perangkat lunak mendengarkan koneksi soket yang masuk, itu bertindak sebagai server. Setiap data yang datang melalui koneksi soket dikatakan diterima oleh server. Kita dapat mereplikasi perilaku ini dengan sangat mudah menggunakan nc . Setiap data yang diterima ditampilkan di jendela terminal.

Kita perlu memberi tahu nc untuk mendengarkan koneksi, menggunakan opsi -l (listen), dan kita perlu menentukan port tempat kita akan mendengarkan koneksi. Setiap program atau proses klien yang mencoba menyambung ke instance nc ini harus menggunakan port yang sama. Kami memberi tahu nc port mana yang akan didengarkan dengan menggunakan opsi -p (port).

Perintah ini memulai nc sebagai server soket, mendengarkan koneksi pada port 6566:

 nc -l -p 6566 

memulai nc sebagai server soket

Sementara menunggu koneksi masuk, nc tidak menghasilkan output. Setelah koneksi dibuat, setiap informasi yang diambil akan ditampilkan di jendela terminal. Di sini, koneksi telah dibuat oleh program klien yang mengidentifikasi dirinya sebagai "klien 1."

nc menerima data dari klien

Semua yang ditampilkan oleh nc diterima dari klien. Klien ini kebetulan mengirim namanya, dan pesan bernomor yang berisi waktu dan tanggal.

Ketika klien memutuskan koneksinya, nc berakhir dan Anda kembali ke prompt terminal.

nc dihentikan setelah pemutusan dari sisi klien

Mengirim Data ke File

Untuk menangkap data dari klien dalam sebuah file, kita dapat mengirim output dari nc ke file menggunakan redirection. Perintah ini menyimpan data yang diterima dalam file bernama “logfile.txt.”

 nc -l -p 6566 > file log.txt 

Mengarahkan output dari nc ke file teks

Anda tidak akan melihat output apa pun—itu masuk ke file—dan, secara paradoks, Anda tidak akan tahu apakah koneksi telah terjadi hingga nc berakhir. Kembali ke prompt perintah menunjukkan koneksi telah terjadi dan telah dihentikan oleh klien.

Kita dapat menggunakan less untuk meninjau isi file “logfile.txt”.

 lebih sedikit logile.txt 

Menggunakan lebih sedikit untuk memeriksa file teks

Anda kemudian dapat menggulir data, dan mencari menggunakan fungsi bawaan less.

Meninjau keluaran yang diambil dari nc dalam waktu kurang

TERKAIT: Cara Menggunakan Lebih Sedikit Perintah di Linux

Mengirim Data ke File dan Jendela Terminal

Jika Anda ingin melihat data bergulir di jendela terminal dan mengirimkannya ke file pada saat yang sama, pipa output dari nc ke tee .

 nc -l -p 6566 | tee logfile.txt 

Mengirim output dari nc ke file dan ke jendela terminal secara bersamaan

Menerima Banyak Koneksi

Semua itu baik-baik saja, tetapi memiliki batasan. Kami hanya dapat menerima satu koneksi. Kami dibatasi untuk menerima data dari satu klien. Juga, ketika klien itu memutuskan koneksi, server soket kami nc berakhir.

Jika Anda perlu menerima banyak koneksi, kami perlu menggunakan ncat . kita perlu memberi tahu ncat untuk mendengarkan, dan menggunakan port tertentu, seperti yang kita lakukan dengan nc . Tapi kita juga akan menggunakan opsi -k (tetap hidup). Ini memberitahu ncat untuk tetap berjalan dan menerima koneksi dari klien bahkan ketika koneksi aktif terakhir terputus.

Ini berarti ncat akan berjalan sampai kita memilih untuk menghentikannya dengan "Ctrl-C." Koneksi baru akan diterima apakah ncat saat ini terhubung ke klien mana pun atau tidak.

 ncat -k -l -p 6566 

mendengarkan beberapa koneksi dengan ncat

Kita dapat melihat data dari klien yang berbeda muncul di output dari ncat saat mereka terhubung.

Klien kedua dan ketiga terhubung ke ncat

Menghubungkan ke Server

Kami juga dapat menggunakan nc sebagai klien soket dan terhubung ke program lain yang menerima koneksi, dan bertindak sebagai server. Dalam skenario ini, nc adalah klien soket. Untuk melakukan ini, kita perlu memberi tahu nc di mana perangkat lunak server berada di jaringan.

Salah satu cara untuk melakukannya adalah dengan memberikan alamat IP dan nomor port. Jika server berada di pc yang sama dengan tempat kita menjalankan nc , kita dapat menggunakan alamat IP loopback 127.0.0.1. Bukan berarti tidak ada flag yang digunakan untuk menunjukkan alamat server dan nomor port. Kami hanya memberikan nilai yang sesuai.

Untuk terhubung ke server di PC yang sama, dan menggunakan port 6566, kita bisa menggunakan alamat IP loopback. Perintah yang digunakan adalah:

 nc 127.0.0.1 6566 

Menggunakan nc sebagai klien soket

Data yang diambil nc dari server akan digulirkan di jendela terminal.

Mengambil data dari server soket dengan nc

Jika Anda mengetahui nama jaringan komputer yang menjalankan perangkat lunak server, Anda dapat menggunakannya sebagai ganti alamat IP.

 nc sulaco 6566 

Menggunakan nc untuk terhubung ke server soket menggunakan nama PC tempat server berjalan

Gunakan "Ctrl + C" untuk memutuskan koneksi.

Cepat dan mudah

nc dan ncat sesuai dengan tagihan ketika Anda tidak ingin menulis penangan soket khusus, tetapi Anda perlu mengumpulkan data dari beberapa sumber yang mendukung soket. Mengarahkan output ke file memungkinkan Anda meninjau output menggunakan less , dan mengurai file menggunakan utilitas seperti grep .

TERKAIT: Cara Menggunakan Perintah grep di Linux