Bagaimana cara membuat paket UDP?

15

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/53menghasilkan kesalahan "paket salah" di Wireshark.

Masukkan deskripsi gambar di sini

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.

pengguna322500
sumber
10
Menurut tangkapan layar Anda, itu bukan paket udp itu sendiri yang salah tetapi isinya, karena port 53 digunakan untuk DNS dan paket Anda tidak berisi permintaan DNS yang valid.
tkausl
@ tkausl Anda memang benar. Tidak ada kesalahan "salah bentuk" saat menggunakan port selain 53. Terima kasih telah menunjukkannya.
user322500
1
Jika Anda tidak menggunakan protokol standar, Anda seharusnya menggunakan port dalam kisaran 49152 hingga 65535. Karena Linux secara default menggunakan kisaran 32768 hingga 60999 sebagai port sementara, saya sarankan untuk tidak memilih port lain untuk protokol non-standar. Namun 61000 hingga 65535 adalah permainan yang adil untuk protokol non-standar. Saya biasanya menggunakan echo $[61002+RANDOM%4532]untuk memilih nomor port acak dalam kisaran itu.
kasperd
1
Jangan login sebagai root. Anda harus melakukan sebagian besar aktivitas Anda sebagai pengguna non-root. Jika Anda melakukan hal-hal sebagai root, Anda akan kembali ke sini bertanya bagaimana memperbaiki mesin Anda, dan kami tidak akan dapat membantu (kecuali untuk merekomendasikan menginstal ulang).
ctrl-alt-delor
1
@tkausl Lihat apa yang hilang dari Anda karena tidak memposting komentar Anda sebagai jawaban ....
George Vasiliou

Jawaban:

41

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.

Pasang kembali Monica - ζ--
sumber
15

Anda dapat mengirim mereka ke alias khusus Bash dengan pengalihan.

Dari manual Bash:

/ dev / tcp / host / port Jika host adalah nama host atau alamat Internet yang valid, dan port adalah nomor port integer atau nama layanan, bash mencoba untuk membuka soket TCP yang sesuai.

/ dev / udp / host / port Jika host adalah nama host atau alamat Internet yang valid, dan port adalah nomor port integer atau nama layanan, bash mencoba untuk membuka soket UDP yang sesuai.

Ini akan mengirim paket UDP ke 192.168.2.11 ke port 8080:

echo "This is a test" > /dev/udp/192.168.2.11/8080
rAlen
sumber
Terima kasih atas jawaban ini. Saya telah memperbarui pertanyaan saya. Sayangnya, menggunakan metode Anda juga menghasilkan pesan kesalahan "paket cacat".
user322500
-1

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, ncatau netcat, atau melalui fitur yang sangat mirip di shell seperti ksh93atau bash) 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 nmapmelakukan 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.

thrig
sumber