Code:
// Standard Includes
#include <iostream>
#include <winsock.h>
#include <stdio.h>
#include "packets.h"
using namespace std;
//
// ----> Main Program Function (REQUIRED)
//
void PacketDisplay(char *buf,int iBytesSent);
int main()
{
SOCKET skSocket;
sockaddr_in saServerAddress;
int iPort = 2593,iStatus;
WSADATA wsaData;
WORD wVersionRequested;
LPHOSTENT lpHost;
char szHost[128];
char szSendBuffer[256];
char szRecvBuffer[32768];
int iBytesSent;
int iBytesReceived;
//Ricks ........
int i;
stLogin LoginPacket = { 0 };
stHuepacket HuePacket = { 0 };
stServerSelect ServerSelect = {0};
stGameLogin GameLogin = {0};
stServerKey ServerKey = {0};
stGeneric GenericPacket = {0};
stCharacterSelect CharacterSelect = {0};
stTalkRequest TalkRequest = {0};
stMoveRequest MoveRequest = {0};
stMoveRejected MoveRejected = {0};
stRedirect Redirect = {0};
MoveRequest.cmd = 2;
MoveRequest.direction = 2;
MoveRequest.sequence = 125;
int iBytesRecv = 0;
TalkRequest.cmd.cmd = 0xAD;
//00 26 00 00 26 00 03
TalkRequest.exact[1] = 0x00;
TalkRequest.exact[2] = 0x26;
TalkRequest.exact[3] = 0x00;
TalkRequest.exact[4] = 0x00;
TalkRequest.exact[5] = 026;
TalkRequest.exact[6] = 0x00;
TalkRequest.exact[7] = 0x03;
//00 48 00
TalkRequest.Unkown1[1] = 0x00;
TalkRequest.Unkown1[2] = 0x48;
TalkRequest.Unkown1[3] = 0x00;
/*TalkRequest.size = 0x0026;
TalkRequest.type = 0x00;
TalkRequest.color = 0x0026;
TalkRequest.font = 0x0003;*/
char Languages[4] = "ENU";
char msgs[30] = "HELLO WORLD";
strcpy(TalkRequest.msg,msgs);
strcpy(TalkRequest.Language,Languages);
GameLogin.cmd.cmd = 0x91;
ServerSelect.One = 160;
HuePacket.One = 192;
HuePacket.Two = 168;
HuePacket.Thee = 1;
HuePacket.Four = 103;
char OverflowMainLogin[62];
char OverflowHue[4];
char OverflowServerSelect[3];
char OverflowLogin[35];
char OverflowCharSelect[73];
char OverflowTalkRequest[42];
char OverflowMove[7];
char RecvBuffer[40];
char DataPacketiP[4];
char Uname[30] = "Name";
char Pword[30] = "Password";
char CharName[30] = "Rhy";
sprintf(szHost,"192.168.1.103");
CharacterSelect.cmd = 93;
LoginPacket.i = 128;
LoginPacket.Unkown1 = 93;
strcpy(LoginPacket.Username,Uname);
strcpy(LoginPacket.Password,Pword);
strcpy(CharacterSelect.CharName,CharName);
strcpy(GameLogin.Username,Uname);
strcpy(GameLogin.Password,Pword);
//Ricks ........ end
// Init the host value, change this IP to whatever valid IP you wish
// Tell WinSock we want version 2
wVersionRequested = MAKEWORD( 2, 0 );
// Initialize the socket handle
skSocket = INVALID_SOCKET;
// Startup WinSock
iStatus = WSAStartup( wVersionRequested, &wsaData );
// Create the socket
skSocket = socket( AF_INET, SOCK_STREAM, 0 );
// Check if there was an error
if( skSocket == INVALID_SOCKET ) {
cout << "**ERROR** Could Not Create Socket" << endl;
// Clean up WinSock
WSACleanup();
exit(1);
}
cout << "<-- SOCKET CREATED -->" << endl;
// Initialize the server address data structure
memset(&saServerAddress,0,sizeof(sockaddr_in));
// Set this by default
saServerAddress.sin_family = AF_INET;
// Load the IP Address
saServerAddress.sin_addr.s_addr = inet_addr(szHost);
// If the host specified is not an IP Address we must look up the value
if( saServerAddress.sin_addr.s_addr == INADDR_NONE )
{
cout << "<-- LOOKING UP HOST IP -->" << endl;
// Get the host name
lpHost = gethostbyname(szHost);
// Check if we got something back
if (lpHost != NULL) {
// Load the server address with the host information
saServerAddress.sin_addr.s_addr = ((LPIN_ADDR)lpHost->h_addr)->s_addr;
}
else {
cout << "**ERROR** Could Not Locate Host" << endl;
// Clean up WinSock
WSACleanup();
exit(1);
}
}
// Set the Server Port
saServerAddress.sin_port = htons(iPort);
// Attempt to connect to the server
iStatus = connect(skSocket, (struct sockaddr*)&saServerAddress,sizeof(sockaddr));
// Check if there was an error
if( iStatus == SOCKET_ERROR ) {
cout << "**ERROR** Could Not Connect To Server" << endl;
// Clean up WinSock
WSACleanup();
exit(1);
}
cout << "<-- CONNECTED TO SERVER -->" << endl;
// Load the data to send
// Send the HTTP Request
memcpy(OverflowMainLogin,&LoginPacket,sizeof(stLogin));
memcpy(OverflowHue,&HuePacket,sizeof(stHuepacket));
//memcpy(OverflowLogin,&GameLogin,sizeof(stGameLogin));
memcpy(OverflowCharSelect,&CharacterSelect,sizeof(stCharacterSelect));
memcpy(OverflowServerSelect,&ServerSelect,sizeof(stServerSelect));
memcpy(OverflowTalkRequest,&TalkRequest,sizeof(TalkRequest));
iBytesSent = send(skSocket,OverflowHue,sizeof(OverflowHue),0);
cout << "<-- SENT " << iBytesSent << " BYTES -->" << endl;
PacketDisplay(OverflowHue, iBytesSent);
iBytesSent = send(skSocket,OverflowMainLogin,sizeof(OverflowMainLogin),0);
cout << "<-- SENT " << iBytesSent << " BYTES -->" << endl;
PacketDisplay(OverflowMainLogin, iBytesSent);
// Wait for incoming data
iBytesReceived = recv(skSocket,szRecvBuffer,32768,0);
cout << "<-- RECEIVED " << iBytesReceived << " BYTES -->" << endl;
memcpy(&GenericPacket,szRecvBuffer,sizeof(stGeneric));
// Output the data received
PacketDisplay(szRecvBuffer,iBytesReceived);
// Close the socket
iBytesSent = send(skSocket,OverflowServerSelect,sizeof(stServerSelect),0);
cout << "<-- SENT " << iBytesSent << " BYTES -->" << endl;
PacketDisplay(OverflowServerSelect, iBytesSent);
system("pause");
iBytesReceived = recv(skSocket,szRecvBuffer,32768,0);
cout << "<-- RECEIVED REDIRECT " << iBytesReceived << " BYTES -->" << endl;
memcpy(&Redirect,szRecvBuffer,sizeof(stRedirect));
PacketDisplay(szRecvBuffer,iBytesReceived);
GameLogin.key[0] = Redirect.key[0];
GameLogin.key[1] = Redirect.key[1];
GameLogin.key[2] = Redirect.key[2];
GameLogin.key[3] = Redirect.key[3];
memcpy(OverflowLogin,&GameLogin,sizeof(stGameLogin));
iBytesSent = send(skSocket,OverflowLogin,sizeof(stGameLogin),0);
cout << "<-- SENT " << iBytesSent << " BYTES -->" << endl;
PacketDisplay(OverflowLogin, iBytesSent);
system("pause");
iBytesReceived = recv(skSocket,szRecvBuffer,32768,0);
cout << "<-- RECEIVED " << iBytesReceived << " BYTES -->" << endl;
system("pause");
iBytesSent = send(skSocket,OverflowCharSelect,sizeof(stCharacterSelect),0);
cout << "<-- SENT " << iBytesSent << " BYTES -->" << endl;
PacketDisplay(OverflowCharSelect, iBytesSent);
//****HERE**** packets no longer make sence.
int Wait = 0;
while( Wait != 1){
iBytesReceived = recv(skSocket,szRecvBuffer,32768,0);
cout << "BYTES " << iBytesSent << endl;
memcpy(&GenericPacket,szRecvBuffer,sizeof(stGeneric));
cout << " Packet Id: " << hex<<unsigned short(szRecvBuffer[0]) << endl;
PacketDisplay(szRecvBuffer,iBytesReceived);
if(int(unsigned char(szRecvBuffer[0])) == 0xBF)
{
PacketDisplay(szRecvBuffer,iBytesReceived);
Wait = 1;
}
}
system("pause");
closesocket(skSocket);
cout << "< CLOSED SOCKET > " << endl;
// Clean up WinSock
WSACleanup();
cout << "< CLEANED UP WSA > " << endl;
return EXIT_SUCCESS;
}
void PacketDisplay(char *buf,int iBytesSent)
{
int i;
for(i=1;i<iBytesSent;i++)
{
if(buf[i] == 0)
{
cout << "00" << " ";
}
else
{
cout << hex<<int(unsigned char(buf[i])) << " ";
}
}
cout << endl;
/*cout<< "In Chars" << endl;
cout << " Packet Id: " << unsigned char(buf[0]) << endl;
for(i=0;i<iBytesSent;i++)
{
if(buf[i] == 0)
{
cout << "00" << " ";
}
else
{
cout << unsigned char(buf[i]) << " ";
}
}
cout << endl;*/
}
/*iBytesReceived = 0;
while(iBytesReceived == 0){
iBytesReceived = recv(skSocket,szRecvBuffer,32768,0);
cout << "<-- RECEIVED " << iBytesReceived << " BYTES -->" << endl;
cout << "Packet Id: " << int(szRecvBuffer[0]) << endl;
for(i=1;i<iBytesReceived;i++)
{
cout << szRecvBuffer[i] << " ";
}
cout << endl;
}
cout << "< Finish Loop >" << endl;*/
/*memcpy(OverflowMove,&MoveRequest,sizeof(stMoveRequest));
iBytesSent = send(skSocket,OverflowMove,sizeof(stMoveRequest),0);
cout << "<-- SENT MOVE " << iBytesSent << " BYTES -->" << endl;
system("pause");
iBytesSent = send(skSocket,OverflowTalkRequest,sizeof(stTalkRequest),0);
cout << "<-- SENT TALK " << iBytesSent << " BYTES -->" << endl;
PacketDisplay(OverflowTalkRequest,iBytesSent);*/