Salve a tutti, sto cercando di creare un proxy TCP che faccia da intermedio tra Client e il Server di un gioco per consentirmi di visualizzare i pacchetti scambiati tra il client e il server di gioco. Di seguito il codice C che ho implementato:
Gameclient.exe <->(recv) TCP proxy (send)<-> GameServer
Soltanto che non capisco come mai il proxy non funzioni.. ho verificato che la porta scelta sia abilitata alle connessioni in entrare ed in uscita nel firewall, ovviamente eseguo il proxy prima di aprire il client di gioco ma nulla. Il proxy resta sempre in attesa di una connessione, anche quando effettivamente avvio il gioco. Qualcuno potrebbe aiutarmi? Vi ringrazio in anticipo.
Gameclient.exe <->(recv) TCP proxy (send)<-> GameServer
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 8080
int main(int argc, char* argv[]) {
WSADATA wsa;
SOCKET s, new_socket;
struct sockaddr_in server, client;
int c;
printf("\nInitializing Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
printf("WSAStartup fallito. Errore!: %d", WSAGetLastError());
return 1;
}
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
printf("Impossibile creare il socket! : %d", WSAGetLastError());
}
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_port = htons(PORT);
if (bind(s, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) {
printf("Impossibile comunicare! %d", WSAGetLastError());
}
listen(s, 3);
puts("Aspettando connessioni..");
c = sizeof(struct sockaddr_in);
while ((new_socket = accept(s, (struct sockaddr*)&client, &c)) != INVALID_SOCKET) {
puts("Connessione accettata!");
SOCKET server_socket = socket(AF_INET, SOCK_STREAM, 0);
if (server_socket == INVALID_SOCKET) {
printf("Impossibile creare il socket: %d", WSAGetLastError());
return 1;
}
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("Remote IP SERVER");
server_address.sin_port = htons(RemotePORTSERVER);
if (connect(server_socket, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
printf("Errore di connessione");
return 1;
}
char buffer[1024];
int bytes_received;
while ((bytes_received = recv(new_socket, buffer, sizeof(buffer), 0)) > 0) {
send(server_socket, buffer, bytes_received, 0);
memset(buffer, 0, sizeof(buffer));
bytes_received = recv(server_socket, buffer, sizeof(buffer), 0);
send(new_socket, buffer, bytes_received, 0);
memset(buffer, 0, sizeof(buffer));
}
closesocket(server_socket);
puts("Server Remoto disconnesso");
closesocket(new_socket);
puts("Connessione client terminata");
}
WSACleanup();
return 0;
}