Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // -----------------------------
- #include <cstring>
- #include <iostream>
- #include <winsock2.h>
- // -----------------------------
- // 0xDEAD00 = 14593280
- int main(int argc, char* argv[]){
- // host
- char* host = "mc-pl.net";
- unsigned short port = 25565;
- // WinSockAPI startup
- WSADATA wsaData;
- SOCKADDR_IN saddr;
- SOCKET sock;
- WSAStartup( MAKEWORD(2,2), &wsaData );
- sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
- // resolve hostname
- LPHOSTENT hostEntry = gethostbyname(host);
- if ( !hostEntry ){
- unsigned int addr = inet_addr(host);
- hostEntry = gethostbyaddr( (char*)&addr, 4, AF_INET);
- if ( !hostEntry ) return 0xDEAD01;
- } /* can't resolve hostname */
- saddr.sin_addr.S_un.S_addr
- = *((int*)*hostEntry->h_addr_list);
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(port);
- // establishing connection
- if ( connect(sock, (sockaddr*)&saddr, sizeof(sockaddr)) == SOCKET_ERROR )
- return 0xDEAD02; /* connection is not established */
- // constructing "handshake" packet
- char handshake[] = {0x14, 0x00, 0xD2, 0x01, 0x0D,
- '1', '5', '1', '.',
- '8', '0', '.',
- '1', '0', '8', '.',
- '1', '5',
- 0x63, 0xDD, 0x01 };
- char &hs_lenght = handshake[0];
- // constructing "request" packet
- char request[] = {0x01, 0x00};
- char &rq_lenght = request[0];
- // server status request
- char buffer [ 0x10000 ];
- short bytes_sent = 0;
- short bytes_readen = 0;
- /* assuming succesful sending and reciving */
- bytes_sent += send( sock, handshake, hs_lenght+1, 0 );
- bytes_sent += send( sock, request, rq_lenght+1, 0 );
- bytes_readen += recv( sock, buffer, 0x10000, 0 );
- // ping pong
- char ping[ 10 ] = { 0x09, 0x01, /* any 8 bytes */ };
- char pong[ 10 ] ; /* pong should be same as ping */
- send( sock, ping, 10, 0 );
- recv( sock, pong, 10, 0 );
- // analising and displaying results
- char* JSON = (char*) memchr( buffer, '{', 12 );
- /* 12 = (2 * varint + PacketID) */
- if ( !memcmp( ping, pong, 10 ) )
- std::cout << JSON << '\n' << '\n'
- << "\tping pong is:\tOK!\n"
- << "\tbytes sent:\t" << bytes_sent << '\n'
- << "\tbytes readen:\t" << bytes_readen << '\n';
- else return 0xDEAD00; /* ping pong failed */
- // EOC - end of coding ;P (today's)
- closesocket(sock);
- WSACleanup();
- return 0x0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement