Netcat (atau nc) adalah utilitas baris perintah yang membaca dan menulis data melalui koneksi jaringan, menggunakan protokol TCP atau UDP. Perintah ini adalah salah satu alat yang paling kuat dalam jaringan dan persenjataan administrator sistem dan dianggap sebagai alat multi fungsi.

Netcat adalah cross-platform dan tersedia untuk Linux, macOS, Windows, dan BSD. Anda dapat menggunakan Netcat untuk men-debug dan memonitor koneksi jaringan, memindai port yang terbuka, mentransfer data, sebagai proxy, dan lainnya.

Paket Netcat sudah diinstal sebelumnya pada macOS dan distribusi Linux populer seperti Ubuntu.

Sintaks Netcat

Sintaks paling dasar dari utilitas Netcat mengambil bentuk berikut:

nc [options] host port

Di Ubuntu, Anda bisa menggunakan netcat atau nc. Keduanya adalah tautan simbolik (symlink) ke versi OpenBSD dari Netcat.

Secara default, Netcat akan mencoba untuk memulai koneksi TCP ke host dan port yang ditentukan. Jika Anda ingin membuat koneksi UDP, gunakan opsi -u:

nc -u host port

Port Scanning

Ports Scanning atau pemindaian port adalah salah satu kegunaan paling umum untuk Netcat. Anda dapat menggunakan Netcat untuk memindai port tunggal atau rentang port.

Misalnya untuk memindai port yang terbuka di kisaran 20-80 Anda dapat menggunakan perintah berikut:

nc -z -v 10.10.5.8 20-80

Opsi -z akan memberitahu nc hanya memindai port yang terbuka, tanpa mengirim data apa pun kepada mereka dan opsi -v untuk memberikan lebih banyak informasi verbose.

Outputnya akan terlihat seperti ini:

nc: connect to 10.10.5.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.5.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.5.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.5.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.5.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.5.8 80 port [tcp/http] succeeded!

Jika Anda ingin mencetak hanya baris dengan port terbuka, Anda dapat memfilter hasilnya dengan perintah grep.

nc -z -v 10.10.5.8 20-80 2>&1 | grep succeeded
Connection to 10.10.5.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.5.8 80 port [tcp/http] succeeded!

Anda juga dapat menggunakan Netcat untuk menemukan perangkat lunak server dan versinya. Misalnya, jika Anda mengirim perintah “EXIT” ke server pada port standar SSH, yaitu port 22:

echo "EXIT" | nc 10.10.5.8 22

Outputnya akan terlihat seperti ini:

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

Untuk memindai port UDP cukup tambahkan opsi -u ke perintah seperti yang ditunjukkan di bawah ini:

nc -z -v -u 10.10.5.8 20-80

Dalam sebagian besar situasi, Nmap adalah alat yang lebih baik daripada Netcat untuk pemindaian port yang kompleks.

Mengirim File melalui Netcat

Netcat dapat digunakan untuk mentransfer data dari satu host ke host lain dengan membuat model basic client/server.

Arsitektur client/server memungkinkan Netcat untuk listen pada port tertentu (menggunakan opsi -l) pada host penerima dan kemudian membuat koneksi TCP reguler dari host lain dan mengirimkan file.

Pada saat pihak penerima menjalankan perintah berikut yang akan membuka port 5555 untuk koneksi masuk, dan mengarahkan output ke file:

nc -l 5555 > file_name

Dari host pengirim hubungkan ke host penerima dan kirim file:

nc receiving.host.com 5555 < file_name

Untuk mentransfer direktori, Anda dapat menggunakan tar untuk mengarsipkan direktori pada host sumber dan untuk mengekstrak arsip pada host tujuan.

Pada host penerima, set Netcat untuk listen koneksi masuk pada port 5555. Setelah itu pisahkan dengan simbol pipe ( | ) yang mengartikan bahwa data yang masuk akan segera disalurkan ke perintah tar untuk mengekstrak arsip:

nc -l 5555 | tar xzvf -

Pada host pengirim, arsipkan direktori dengan perintah tar dan kirim data dengan menggunakan proses nc kemudian set pada port yang sama dengan host penerima:

tar czvf - /path/to/dir | nc alamat.host.penerima 5555

Sekarang jika Anda mengetik pesan dan menekan ENTER akan ditampilkan di kedua host.

Membuat Chat Server Sederhana dengan Netcat

Prosedur untuk membuat chatting online antara dua host atau lebih sama dengan ketika mentransfer file.

Pada host pertama, mulailah proses Netcat untuk listen pada port 5555:

nc -l 5555

Dari host kedua jalankan perintah berikut untuk koneksikan ke port yang sama pada host pertama:

nc alamat.host.pertama 5555

Sekarang jika Anda mengetik pesan dan menekan ENTER akan ditampilkan di kedua host.

Untuk menutup koneksi, ketik CTRL+C.

Netcat untuk HTTP request

Meskipun ada alat yang jauh lebih baik untuk melakukan permintaan HTTP seperti perintah curl, Anda juga dapat menggunakan Netcat untuk mengirim berbagai permintaan ke remote server.

Misalnya, untuk mengambil halaman manual Netcat dari situs web OpenBSD, Anda dapat mengetik perintah:

printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

Respons penuh termasuk header HTTP dan kode HTML akan dicetak di terminal.

Kesimpulan

Dalam tutorial ini, Anda telah belajar cara menggunakan utilitas Netcat untuk membuat dan menguji koneksi TCP dan UDP.

Untuk informasi lebih lanjut, kunjungi halaman manual Netcat dan baca tentang semua opsi powerful lainnya dari perintah Netcat.