📄 sendippack.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 + -