Cara Membuat UDP_Flooder Sederhana Di C pt2
| Author : thofiba blogspot | Label : Tutorial | Rabu 24 Februari 2016 |
Pada Tutorial ini kami memberi Anda tugas pekerjaan rumah. Minggu ini kita akan melihat versi kami dari UDP-Flooder.
Baiklah, saya asumsikan Anda sudah menulis atau setidaknya berusaha.
Pertama mari kita lihat pada struct digunakan dalam program ini.
struct sockaddr_in
periksa /usr/include/netinet/in.h struct ini digunakan untuk menyimpan pelabuhan dan ipadress.
Ini memiliki 3 anggota:
di-port dosa-port adalah port, kita akan menggunakan fungsi untuk menetapkan nilai.
struct di-addr dosa-addr adalah alamat IP, itu adalah sebuah struct, kita tidak akan pergi ke detail tentang struct ini, karena kita akan menggunakan fungsi untuk menetapkan nilai-nilai itu.
dosa-nol digunakan untuk membuatsockaddr-in ukuran sockaddr. Hal ini penting agar kita bisa typecast sockaddr-in sebagai sockaddr.
Perhatikan arithmics digunakan untuk ukuran array dosa-nol.
Hal ini konvensi untuk menggunakan memset () ke nol dosa-nol, namun hal ini tidak akan diperlukan dalam UDP-Flooder.
Sekarang mari kita lihat fungsi yang digunakan dalam program ini.
int socket ()
Periksa man 2 socket jika Anda belum
Inilah yang menciptakan socket. Ia mengembalikan socketdescriptor yang sebanding dengan file descriptor.
Membutuhkan waktu 3 argumen:
• int domain
• Jenis int
• protokol int
domain digunakan untuk menentukan domain komunikasi.
Yang palingsering digunakan adalah AF INET, AF INET6 untuk soket internet. Ini mewakili IPv4 dan IPv6 masing-masing.
Jenis ini digunakan untuk menentukan apakah Anda menggunakan kaus kaki STREAM, Sock DGRAM, kaus kaki RAW, atau sesuatu yang lain. Dua yang pertama adalah standar dalam TCP dan UDP masing-masing. Yang ketiga akan dibahas di bagian selanjutnya dari seri ini;)
protokol yang digunakan untuk menentukan protokol yang Anda gunakan. Hal ini tergantung pada jenis apa artinya angka-angka. Periksa /usr/include/netinet/in.h untuk daftar lengkap.
Untuk UDP Flooder ini saya telah menggunakan AF INET, kaus kaki DGRAM dan IPPROTO UDP.
size_t sizeof ()
Digunakan untuk mengembalikan ukuran variabel atau datatype dalam byte. Berguna untuk fungsi yang mengambil ukuran variabel tertentu atau datatype sebagai argumen.
int inet_aton ()
Membutuhkan dua argumen:
• alamat const char (POINTER)
• struct di addr INP (POINTER)
Alamat const char adalah string dalam format sebuah alamat ip, misalnya: "127.0.0.1", dalam program ini saya telah menggunakan argv1 sebagai argumen. struct serv.sin-addr adalah di mana nilai akan disimpan.
Program ini akan mengambil alamat sebagai argumen, mengubahnya menjadi komputer yang dapat dibaca, dan toko yang di serv.sin-addr
Perhatikan bahwa saya menggunakan & serv.sin-addr dalam fungsi. Ini adalah alamat memori dari serv.sin-addr, sehingga dapat digunakan sebagai struct argumen di addr INP fungsi inet-aton ().
uint16_t htons ()
Dibutuhkan satu argumen, hostshort. Digunakan untuk mengubah urutan hostbyte untuk jaringan urutan byte. Dengan tuan rumah urutan byte yang dimaksud, urutan byte bahwa mesin Anda menggunakan.
Hal ini dapat berupa Sedikit Endian atau Big Endian. Google ini jika Anda ingin tahu lebih banyak tentang hal ini, apa yang penting, adalah bahwa (inter) net menggunakan Big Endian, dan dalam jaringan disebut jaringan urutan byte.
Jadi apa program ini, adalah memeriksa apa yang menggunakan mesin Anda, Big Endian mengkonversi kecil Endian, mengubahnya menjadi Big Endian jika diperlukan, dan akhirnya mengembalikan nilai sebagai uint16-t.
ssize_t sendto ()
Baiklah, fungsi ini adalah apa yang sebenarnya mengirimkan paket.
Dibutuhkan 6 argumen:
• int socket
• const kekosongan pesan (POINTER)
• panjang ukuran-t
• bendera int
• const struct sockaddr dest-addr (POINTER)
• socklen-t dest-len
Jadi soket, akan menjadi descriptor socket dikembalikan oleh socket ().
Pesan adalah pointer ke pesan, juga dapat memberikan string.
Ukuran-t panjang adalah panjang pesan, saya hanya menempatkan 2 di sini sejak pesan itu tidak penting di flooder ini dan saya hanya membuatnya sependek mungkin.
int bendera Digunakan untuk mengatur bendera, periksa halaman manual, 0 tanpa bendera.
const struct sockaddr dest-addr (POINTER) Baiklah, seperti yang saya katakan di sockaddr-sebagian, sockaddr-in memiliki ukuran yang sama dengan sockaddr.
Aku tidak akan pergi ke detail tentang perbedaan antara kedua, tapi tetap saja ingat bahwa sockaddr-in digunakan untuk socket internet dan sockaddr digunakan untuk soket tujuan umum.
Karena sockaddr-in memiliki ukuran yang sama dengan sockaddr dan anggota sockaddr-in dan sockaddr mulai dengan dua anggota yang sama, serv struct tipe sockaddr-in, dapat typecast sebagai sockaddr (Ingat serv disimpan dalam memori dan anggota tepat di sebelah satu sama lain).
Karena itu diperlukan pointer Aku hanya melakukan & serv.
socklen-t dest-len ini adalah sizeof sockaddr-dalam struct, saya melakukan sizeof (serv), tetapi Anda mungkin juga melakukan sizeof (sockaddr-in). Hanya saja ini tampaknya konvensi yang lebih baik.
Sekarang Algoritma Digunakan
Ini adalah bagian yang paling mudah, aku bahkan memberikannya pergi dalam kode semu.
Saya ditugaskan ipaddr luar untuk loop dan portaddr dalam untuk loop untuk membuatnya menetapkan kembali setiap siklus. Kemudian masing-masing siklus mengirimkan pesan.
Cara Mengurangi Serangan
Nah yang paling OS'es saat ini dilindungi terhadap serangan ini dengan limeting tingkat max di mana OS akan mengirim paket ICMP.
Atau Anda dapat menggunakan Firewall untuk memblokir paket UDP, sehingga mereka tidak akan pernah mencapai target.
Comments
Post a Comment
WeLcOmE TO My SiTeS