Ketika saya melakukan perintah Netcat berikut dan melihat paket-paket dengan Wireshark , ia mengatakan paket UDP salah.
$ echo "this is a test" | nc -u 127.0.0.1 53
Demikian pula, menggunakan perintah seperti $ echo "this is a test" > /dev/udp/127.0.0.1/53
menghasilkan kesalahan "paket salah" di Wireshark.
Perintah echo dikirim / dikirim ke server Netcat tanpa kesalahan. Tapi ini membuat saya bertanya-tanya: apakah mungkin untuk secara manual membangun paket UDP yang tepat dengan gema atau alat Unix asli lainnya?
Saya menggunakan Debian dan macOS.
echo $[61002+RANDOM%4532]
untuk memilih nomor port acak dalam kisaran itu.Jawaban:
Paket Anda benar-benar valid, dari sudut pandang IP dan UDP. Jika Anda memperluas rincian protokol untuk Ethernet / IP / UDP di panel bawah Wireshark, Anda akan melihat bahwa paket tersebut berhasil diurai.
Namun, karena ditujukan untuk port 53, Wireshark mencoba menguraikannya sebagai paket DNS, yang tidak dapat dilakukan (karena string "ini adalah tes" bukan permintaan DNS yang valid per spesifikasi RFC 1035 ).
Jika Anda mengikuti spesifikasi pada tautan itu, Anda akan dapat membuat paket yang valid saat diuraikan sebagai permintaan DNS. Jika Anda mengirim paket ke port lain, Anda akan melihat bahwa Wireshark tidak akan lagi menguraikannya sebagai permintaan DNS dan karenanya tidak akan menampilkan peringatan itu.
sumber
Anda dapat mengirim mereka ke alias khusus Bash dengan pengalihan.
Dari manual Bash:
Ini akan mengirim paket UDP ke 192.168.2.11 ke port 8080:
sumber
Ada beberapa pertanyaan di sini; klaim "paket cacat" mungkin disebabkan oleh pembebanan checksum dan jika demikian adalah kesalahan palsu karena mencerminkan penangkapan paket yang tidak memiliki tampilan lengkap - beberapa pekerjaan malah dilakukan pada perangkat keras jaringan. WireShark harus memiliki dokumentasi tentang ini.
Jika tidak, berbagai alat (seperti
socat
,nc
ataunetcat
, atau melalui fitur yang sangat mirip di shell sepertiksh93
ataubash
) dapat mengambil byte dari input standar dan membuangnya ke dalam apa yang menjadi paket UDP. Apakah ini "tepat" tergantung pada protokol; seseorang dapat secara teori membangun dan mengirim paket DNS atau DHCP dengan cara ini, meskipun lebih sering orang menggunakan perpustakaan atau perangkat lunak khusus yang (mudah-mudahan) mengimplementasikan protokol tersebut dengan benar, karena biasanya ada lebih banyak yang terlibat daripada pengaturan beberapa bit dalam isi paket dan mengirimkannya melalui kabel, terutama menangani respons, mencoba kembali setelah batas waktu atau kesalahan, bidang header paket, dll. Protokol biasanya didokumentasikan dengan sangat baik dalam RFC, atau lihat seri buku "TCP / IP Illustrated" oleh Stevens untuk dokumentasi lebih lanjut.Alat khusus seperti
nmap
melakukan hal-hal yang sangat khusus dengan konstruksi paket. Kalau tidak untuk konstruksi paket manual, bahasa pemrograman biasanya digunakan, meskipun sekali lagi sebagian besar perangkat lunak akan menggunakan perpustakaan atau layanan sistem yang ada untuk mengirimkan DNS atau DHCP atau paket UDP lainnya, karena itu jauh lebih sedikit bekerja dan jauh lebih sedikit kesalahan daripada membuat kerajinan secara manual. paket dari awal.sumber