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

📄 sendippack.cpp

📁 VC编写的简单发包程序和内存分配。内涵源码和测试。
💻 CPP
字号:
// SendIpPack.cpp: implementation of the SendIpPack class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//#include "note.h"
#include "SendIpPack.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//#import Ws2_32.lib
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSendIpPack::CSendIpPack()
{
	memset(&m_p,0,sizeof(LP_INTER));
//	m_bFirst=TRUE;
}

CSendIpPack::~CSendIpPack()
{

}

UINT CSendIpPack::SendIP(DWORD m_sleep,int m_speed)
{
//	LP_Thread *m_p_=(LP_Thread*)m_p;
//	LP_INTER m_p;
//	memcpy(m_p_, (LP_Thread*)m_p, sizeof(LP_Thread));
	
	char strMessage[OICQ_MSG_LEN] = 
	{
		0x02,0x01,0x07,0x00,0x78,0x00,0x00,0x31,0x30,0x30,0x30,0x31,0x1f,0x30,0x1f,
		0x30,0x30,0x1f,0x32,0x30,0x30,0x30,0x2d,0x30,0x31,0x2d,0x30,0x31,0x1f,0x30,
		0x30,0x3a,0x30,0x30,0x3a,0x30,0x30,0x1f,0x68,0x65,0x6c,0x6c,0x6f,0x21,0x03
	}; 

	WSADATA wsd;
	SOCKET s;
	BOOL bOpt;
	struct sockaddr_in remote; 
	IP_HDR ipHdr;
	UDP_HDR udpHdr;
	int ret;
	//DWORD i;
	unsigned short iTotalSize, 
	iUdpSize, 
	iUdpChecksumSize,
	iIPVersion,
	iIPSize,
	cksum = 0;
	char buf[OICQ_MAX_PACKET],
	*ptr = NULL;
	//char *flop="";
	// unsigned short   int port_=0;
	u_short port_=0;
	//AfxMessageBox("Spoof OICQ Msg Sender - by Janker@371.net\n\n%d");
	port_=m_p.in_destport;
//	port_=port_<<8;
	
	srand((unsigned)time(NULL));
	strMessage[5]=rand();
	
	if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"WSAStartup() failed: %d\n", GetLastError());
	AfxMessageBox("WSAStartup() failed: %d\n");
	return -1;
	}
	s = WSASocket(AF_INET, SOCK_RAW, IPPROTO_UDP, NULL, 0,0);
	if (s == INVALID_SOCKET)
	{
	
	//memset(flop,0,sizeof(flop));
	
	//sprintf(flop,"WSASocket() failed: %d\n", WSAGetLastError());
	AfxMessageBox("WSASocket() failed: %d\n");
	
	return -1;
	}
	bOpt = TRUE;
	ret = setsockopt(s, IPPROTO_IP,IP_HDRINCL, (char *)&bOpt, sizeof(bOpt)); //IP_HDRINCL
	if (ret == SOCKET_ERROR)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError());
	AfxMessageBox("setsockopt(IP_HDRINCL) failed: %d\n");
	return -1;
	}
	
	 
	
	iTotalSize = sizeof(ipHdr) + sizeof(udpHdr) + OICQ_MSG_LEN;
	
	 
	
	iIPVersion = 4;
	iIPSize = sizeof(ipHdr) / sizeof(unsigned long);
	
	 
	
	ipHdr.ip_verlen = (iIPVersion<<4) | iIPSize;//
	ipHdr.ip_tos = 0; 
	ipHdr.ip_totallength = htons(iTotalSize); 
	ipHdr.ip_id = 0; 
	ipHdr.ip_offset = 0; 
	ipHdr.ip_ttl = 128; 
	ipHdr.ip_protocol =m_p.in_protocol;
	ipHdr.ip_checksum = 0 ; 
	ipHdr.ip_srcaddr = inet_addr(GetLocalIpAddr()); 
	ipHdr.ip_destaddr = inet_addr(m_p.in_destaddr); //argv[1]"192.168.0.4"
	
	 
	
	iUdpSize = sizeof(udpHdr) + OICQ_MSG_LEN;
	
	 
	//test_ip_port++;
	udpHdr.src_portno = htons(DST_PORT);//);// htons(SRC_PORT);
	udpHdr.dst_portno = htons(port_);//m_p.in_destport
	udpHdr.udp_length = htons(iUdpSize) ;
	udpHdr.udp_checksum = 0 ;
	
	 
	
	iUdpChecksumSize = 0;
	ptr = buf;
	ZeroMemory(buf, OICQ_MAX_PACKET);
	
	 
	
	memcpy(ptr, &ipHdr.ip_srcaddr, sizeof(ipHdr.ip_srcaddr)); 
	ptr += sizeof(ipHdr.ip_srcaddr);
	iUdpChecksumSize += sizeof(ipHdr.ip_srcaddr);
	
	 
	
	memcpy(ptr, &ipHdr.ip_destaddr, sizeof(ipHdr.ip_destaddr)); 
	ptr += sizeof(ipHdr.ip_destaddr);
	iUdpChecksumSize += sizeof(ipHdr.ip_destaddr);
	
	 
	
	ptr++;
	iUdpChecksumSize += 1;
	
	 
	
	memcpy(ptr, &ipHdr.ip_protocol, sizeof(ipHdr.ip_protocol)); 
	ptr += sizeof(ipHdr.ip_protocol);
	iUdpChecksumSize += sizeof(ipHdr.ip_protocol);
	
	 
	
	memcpy(ptr, &udpHdr.udp_length, sizeof(udpHdr.udp_length)); 
	ptr += sizeof(udpHdr.udp_length);
	iUdpChecksumSize += sizeof(udpHdr.udp_length);
	
	 
	
	memcpy(ptr, &udpHdr, sizeof(udpHdr)); 
	ptr += sizeof(udpHdr);
	iUdpChecksumSize += sizeof(udpHdr);
	
	 /*
	
	for(i = 0; i *ptr = strMessage[i];
	iUdpChecksumSize += OICQ_MSG_LEN;
	
	 */
	
	cksum = CheckSum((USHORT *)buf, iUdpChecksumSize);
	udpHdr.udp_checksum = cksum;
	
	 
	
	ZeroMemory(buf, OICQ_MAX_PACKET);
	ptr = buf;
	
	 
	
	memcpy(ptr, &ipHdr, sizeof(ipHdr)); ptr += sizeof(ipHdr);
	memcpy(ptr, &udpHdr, sizeof(udpHdr)); ptr += sizeof(udpHdr);
	memcpy(ptr, strMessage, OICQ_MSG_LEN);
	
	 
	
	remote.sin_family = AF_INET;
	remote.sin_port = htons(m_p.in_destport);//DST_PORT
	remote.sin_addr.s_addr = inet_addr(m_p.in_destaddr);//argv[1]
	
	//	CString ss("");
	//	ss.Format("The PACK is %d",sizeof(buf));
	//	AfxMessageBox(ss);


for(int i1=0;i1<m_speed;i1++)
{
	Sleep(m_sleep);
	ret = sendto(s, buf, iTotalSize, 0, (SOCKADDR *)&remote, sizeof(remote));
	if (ret == SOCKET_ERROR)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"sendto() failed: %d\n", WSAGetLastError());
	AfxMessageBox("sendto() failed: %d\n");
	return -1;
	}
}
	//	else 
//	{//AfxMessageBox("Send O.K.!");
//	printf("Send O.K.!");
//	}
	closesocket(s) ;
	WSACleanup() ;

	return 0;
}

UINT CSendIpPack::SendIP(int m_speed)
{
//	LP_Thread *m_p_=(LP_Thread*)m_p;
//	LP_INTER m_p;
//	memcpy(m_p_, (LP_Thread*)m_p, sizeof(LP_Thread));
	BOOL m_bFirst;	
	char strMessage[OICQ_MSG_LEN] = 
	{
		0x02,0x01,0x07,0x00,0x78,0x00,0x00,0x31,0x30,0x30,0x30,0x31,0x1f,0x30,0x1f,
		0x30,0x30,0x1f,0x32,0x30,0x30,0x30,0x2d,0x30,0x31,0x2d,0x30,0x31,0x1f,0x30,
		0x30,0x3a,0x30,0x30,0x3a,0x30,0x30,0x1f,0x68,0x65,0x6c,0x6c,0x6f,0x21,0x03
	}; 

	WSADATA wsd;
	SOCKET s;
	BOOL bOpt;
	struct sockaddr_in remote; 
	IP_HDR ipHdr;
	UDP_HDR udpHdr;
	int ret;
	//DWORD i;
	unsigned short iTotalSize, 
	iUdpSize, 
	iUdpChecksumSize,
	iIPVersion,
	iIPSize,
	cksum = 0;
	char buf[OICQ_MAX_PACKET],
	*ptr = NULL;
	//char *flop="";
	// unsigned short   int port_=0;
	u_short port_=0;
	//AfxMessageBox("Spoof OICQ Msg Sender - by Janker@371.net\n\n%d");
	port_=m_p.in_destport;
//	port_=port_<<8;
	
	srand((unsigned)time(NULL));
	strMessage[5]=rand();
	
	if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"WSAStartup() failed: %d\n", GetLastError());
	AfxMessageBox("WSAStartup() failed: %d\n");
	return -1;
	}
	s = WSASocket(AF_INET, SOCK_RAW, IPPROTO_UDP, NULL, 0,0);
	if (s == INVALID_SOCKET)
	{
	
	//memset(flop,0,sizeof(flop));
	
	//sprintf(flop,"WSASocket() failed: %d\n", WSAGetLastError());
	AfxMessageBox("WSASocket() failed: %d\n");
	
	return -1;
	}
	bOpt = TRUE;
	ret = setsockopt(s, IPPROTO_IP,IP_HDRINCL, (char *)&bOpt, sizeof(bOpt)); //IP_HDRINCL
	if (ret == SOCKET_ERROR)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError());
	AfxMessageBox("setsockopt(IP_HDRINCL) failed: %d\n");
	return -1;
	}
	
	 
	
	iTotalSize = sizeof(ipHdr) + sizeof(udpHdr) + OICQ_MSG_LEN;
	
	 
	
	iIPVersion = 4;
	iIPSize = sizeof(ipHdr) / sizeof(unsigned long);
	
	 
	
	ipHdr.ip_verlen = (iIPVersion<<4) | iIPSize;//
	ipHdr.ip_tos = 0; 
	ipHdr.ip_totallength = htons(iTotalSize); 
	ipHdr.ip_id = 0; 
	ipHdr.ip_offset = 0; 
	ipHdr.ip_ttl = 128; 
	ipHdr.ip_protocol =m_p.in_protocol;
	ipHdr.ip_checksum = 0 ; 
	ipHdr.ip_srcaddr = inet_addr(GetLocalIpAddr()); 
	ipHdr.ip_destaddr = inet_addr(m_p.in_destaddr); //argv[1]"192.168.0.4"
	
	 
	
	iUdpSize = sizeof(udpHdr) + OICQ_MSG_LEN;
	
	 
	//test_ip_port++;
	udpHdr.src_portno = htons(DST_PORT);//);// htons(SRC_PORT);
	udpHdr.dst_portno = htons(port_);//m_p.in_destport
	udpHdr.udp_length = htons(iUdpSize) ;
	udpHdr.udp_checksum = 0 ;
	
	 
	
	iUdpChecksumSize = 0;
	ptr = buf;
	ZeroMemory(buf, OICQ_MAX_PACKET);
	
	 
	
	memcpy(ptr, &ipHdr.ip_srcaddr, sizeof(ipHdr.ip_srcaddr)); 
	ptr += sizeof(ipHdr.ip_srcaddr);
	iUdpChecksumSize += sizeof(ipHdr.ip_srcaddr);
	
	 
	
	memcpy(ptr, &ipHdr.ip_destaddr, sizeof(ipHdr.ip_destaddr)); 
	ptr += sizeof(ipHdr.ip_destaddr);
	iUdpChecksumSize += sizeof(ipHdr.ip_destaddr);
	
	 
	
	ptr++;
	iUdpChecksumSize += 1;
	
	 
	
	memcpy(ptr, &ipHdr.ip_protocol, sizeof(ipHdr.ip_protocol)); 
	ptr += sizeof(ipHdr.ip_protocol);
	iUdpChecksumSize += sizeof(ipHdr.ip_protocol);
	
	 
	
	memcpy(ptr, &udpHdr.udp_length, sizeof(udpHdr.udp_length)); 
	ptr += sizeof(udpHdr.udp_length);
	iUdpChecksumSize += sizeof(udpHdr.udp_length);
	
	 
	
	memcpy(ptr, &udpHdr, sizeof(udpHdr)); 
	ptr += sizeof(udpHdr);
	iUdpChecksumSize += sizeof(udpHdr);
	
	 /*
	
	for(i = 0; i *ptr = strMessage[i];
	iUdpChecksumSize += OICQ_MSG_LEN;
	
	 */
	
	cksum = CheckSum((USHORT *)buf, iUdpChecksumSize);
	udpHdr.udp_checksum = cksum;
	
	 
	
	ZeroMemory(buf, OICQ_MAX_PACKET);
	ptr = buf;
	
	 
	
	memcpy(ptr, &ipHdr, sizeof(ipHdr)); ptr += sizeof(ipHdr);
	memcpy(ptr, &udpHdr, sizeof(udpHdr)); ptr += sizeof(udpHdr);
	memcpy(ptr, strMessage, OICQ_MSG_LEN);
	
	 
	
	remote.sin_family = AF_INET;
	remote.sin_port = htons(m_p.in_destport);//DST_PORT
	remote.sin_addr.s_addr = inet_addr(m_p.in_destaddr);//argv[1]
	
	//	CString ss("");
	//	ss.Format("The PACK is %d",sizeof(buf));
	//	AfxMessageBox(ss);


for(int i1=0;i1<m_speed;i1++)
{
//	Sleep(m_sleep);
	if(m_bFirst)
	{
		buf[40]=123;
		m_bFirst=FALSE;
	}
	ret = sendto(s, buf, iTotalSize, 0, (SOCKADDR *)&remote, sizeof(remote));
	if (ret == SOCKET_ERROR)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"sendto() failed: %d\n", WSAGetLastError());
	AfxMessageBox("sendto() failed: %d\n");
	return -1;
	}
}
	//	else 
//	{//AfxMessageBox("Send O.K.!");
//	printf("Send O.K.!");
//	}
	closesocket(s) ;
	WSACleanup() ;

	return 0;
}
UINT CSendIpPack::SendIP()
{
//	LP_Thread *m_p_=(LP_Thread*)m_p;
//	LP_INTER m_p;
//	memcpy(m_p_, (LP_Thread*)m_p, sizeof(LP_Thread));
	
	char strMessage[OICQ_MSG_LEN] = 
	{
		0x02,0x01,0x07,0x00,0x78,0x00,0x00,0x31,0x30,0x30,0x30,0x31,0x1f,0x30,0x1f,
		0x30,0x30,0x1f,0x32,0x30,0x30,0x30,0x2d,0x30,0x31,0x2d,0x30,0x31,0x1f,0x30,
		0x30,0x3a,0x30,0x30,0x3a,0x30,0x30,0x1f,0x68,0x65,0x6c,0x6c,0x6f,0x21,0x03
	}; 

	WSADATA wsd;
	SOCKET s;
	BOOL bOpt;
	struct sockaddr_in remote; 
	IP_HDR ipHdr;
	UDP_HDR udpHdr;
	int ret;
	//DWORD i;
	unsigned short iTotalSize, 
	iUdpSize, 
	iUdpChecksumSize,
	iIPVersion,
	iIPSize,
	cksum = 0;
	char buf[OICQ_MAX_PACKET],
	*ptr = NULL;
	//char *flop="";
	// unsigned short   int port_=0;
	u_short port_=0;
	//AfxMessageBox("Spoof OICQ Msg Sender - by Janker@371.net\n\n%d");
	port_=m_p.in_destport;
//	port_=port_<<8;
	
	srand((unsigned)time(NULL));
	strMessage[5]=rand();
	
	if (WSAStartup(MAKEWORD(2,2), &wsd) != 0)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"WSAStartup() failed: %d\n", GetLastError());
	AfxMessageBox("WSAStartup() failed: %d\n");
	return -1;
	}
	s = WSASocket(AF_INET, SOCK_RAW, IPPROTO_UDP, NULL, 0,0);
	if (s == INVALID_SOCKET)
	{
	
	//memset(flop,0,sizeof(flop));
	
	//sprintf(flop,"WSASocket() failed: %d\n", WSAGetLastError());
	AfxMessageBox("WSASocket() failed: %d\n");
	
	return -1;
	}
	bOpt = TRUE;
	ret = setsockopt(s, IPPROTO_IP,IP_HDRINCL, (char *)&bOpt, sizeof(bOpt)); //IP_HDRINCL
	if (ret == SOCKET_ERROR)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"setsockopt(IP_HDRINCL) failed: %d\n", WSAGetLastError());
	AfxMessageBox("setsockopt(IP_HDRINCL) failed: %d\n");
	return -1;
	}
	
	 
	
	iTotalSize = sizeof(ipHdr) + sizeof(udpHdr) + OICQ_MSG_LEN;
	
	 
	
	iIPVersion = 4;
	iIPSize = sizeof(ipHdr) / sizeof(unsigned long);
	
	 
	
	ipHdr.ip_verlen = (iIPVersion<<4) | iIPSize;//
	ipHdr.ip_tos = 0; 
	ipHdr.ip_totallength = htons(iTotalSize); 
	ipHdr.ip_id = 0; 
	ipHdr.ip_offset = 0; 
	ipHdr.ip_ttl = 128; 
	ipHdr.ip_protocol =m_p.in_protocol;
	ipHdr.ip_checksum = 0 ; 
	ipHdr.ip_srcaddr = inet_addr(GetLocalIpAddr()); 
	ipHdr.ip_destaddr = inet_addr(m_p.in_destaddr); //argv[1]"192.168.0.4"
	
	 
	
	iUdpSize = sizeof(udpHdr) + OICQ_MSG_LEN;
	
	 
	//test_ip_port++;
	udpHdr.src_portno = htons(DST_PORT);//);// htons(SRC_PORT);
	udpHdr.dst_portno = htons(port_);//m_p.in_destport
	udpHdr.udp_length = htons(iUdpSize) ;
	udpHdr.udp_checksum = 0 ;
	
	 
	
	iUdpChecksumSize = 0;
	ptr = buf;
	ZeroMemory(buf, OICQ_MAX_PACKET);
	
	 
	
	memcpy(ptr, &ipHdr.ip_srcaddr, sizeof(ipHdr.ip_srcaddr)); 
	ptr += sizeof(ipHdr.ip_srcaddr);
	iUdpChecksumSize += sizeof(ipHdr.ip_srcaddr);
	
	 
	
	memcpy(ptr, &ipHdr.ip_destaddr, sizeof(ipHdr.ip_destaddr)); 
	ptr += sizeof(ipHdr.ip_destaddr);
	iUdpChecksumSize += sizeof(ipHdr.ip_destaddr);
	
	 
	
	ptr++;
	iUdpChecksumSize += 1;
	
	 
	
	memcpy(ptr, &ipHdr.ip_protocol, sizeof(ipHdr.ip_protocol)); 
	ptr += sizeof(ipHdr.ip_protocol);
	iUdpChecksumSize += sizeof(ipHdr.ip_protocol);
	
	 
	
	memcpy(ptr, &udpHdr.udp_length, sizeof(udpHdr.udp_length)); 
	ptr += sizeof(udpHdr.udp_length);
	iUdpChecksumSize += sizeof(udpHdr.udp_length);
	
	 
	
	memcpy(ptr, &udpHdr, sizeof(udpHdr)); 
	ptr += sizeof(udpHdr);
	iUdpChecksumSize += sizeof(udpHdr);
	
	 /*
	
	for(i = 0; i *ptr = strMessage[i];
	iUdpChecksumSize += OICQ_MSG_LEN;
	
	 */
	
	cksum = CheckSum((USHORT *)buf, iUdpChecksumSize);
	udpHdr.udp_checksum = cksum;
	
	 
	
	ZeroMemory(buf, OICQ_MAX_PACKET);
	ptr = buf;
	
	 
	
	memcpy(ptr, &ipHdr, sizeof(ipHdr)); ptr += sizeof(ipHdr);
	memcpy(ptr, &udpHdr, sizeof(udpHdr)); ptr += sizeof(udpHdr);
	memcpy(ptr, strMessage, OICQ_MSG_LEN);
	
	 
	
	remote.sin_family = AF_INET;
	remote.sin_port = htons(m_p.in_destport);//DST_PORT
	remote.sin_addr.s_addr = inet_addr(m_p.in_destaddr);//argv[1]
	
	//	CString ss("");
	//	ss.Format("The PACK is %d",sizeof(buf));
	//	AfxMessageBox(ss);

	ret = sendto(s, buf, iTotalSize, 0, (SOCKADDR *)&remote, sizeof(remote));
	if (ret == SOCKET_ERROR)
	{
	//memset(flop,0,sizeof(flop));
	//sprintf(flop,"sendto() failed: %d\n", WSAGetLastError());
	AfxMessageBox("sendto() failed: %d\n");
	return -1;
	}
	//	else 
//	{//AfxMessageBox("Send O.K.!");
//	printf("Send O.K.!");
//	}
	closesocket(s) ;
	WSACleanup() ;

	return 0;
}

USHORT CSendIpPack::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); 
}

LPSTR CSendIpPack::GetLocalIpAddr()
{
	  WORD wVersionRequested;
      WSADATA wsaData;
      char name[255];
//      CString ip;
	  LPSTR ip;
      PHOSTENT hostinfo;
      wVersionRequested = MAKEWORD( 2, 0 );

      if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
      {

            if( gethostname ( name, sizeof(name)) == 0)
            {
                  if((hostinfo = gethostbyname(name)) != NULL)
                  {
                        ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
						return ip;
                  }else return NULL;
            }else return NULL;
            
            WSACleanup( );
      } else return NULL;
}

⌨️ 快捷键说明

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