Encuentro una solicitud incorrecta cuando intento realizar una solicitud GET con un código C en mi servidor web apache2. Aquí está el registro:
92.184.98.135 - - [20/Jul/2021:11:52:17 +0000] "GET //log.php?log=test&name=name HTTP/1.1" 400 0 "-" "-"
Y cuando hago lo mismo con Firefox funciona:
92.184.98.135 - - [20/Jul/2021:11:59:17 +0000] "GET //log.php?log=log&name=name HTTP/1.1" 200 203 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
¿Alguien sabe cómo deshabilitar la verificación de User-Agent con el servidor apache2? ¿O si el problema viene de otro lado?
Aquí está el código de mi función en c:
WSADATA wsa; SOCKET sockfd; char *message_fmt = "GET //log.php?log=%s&name=%s HTTP/1.1\r\n\r\n"; struct hostent *server; struct sockaddr_in serv_addr; int bytes, sent, received, total; char message[4096],response[4096]; FILE * LOG_FILE; LOG_FILE = fopen(file, "r+"); char log[1000] = "data:"; char ch = fgetc(LOG_FILE); while(ch != EOF) { strncat(log, &ch, 1); ch = fgetc(LOG_FILE); } fclose(LOG_FILE); char *username = getenv("USERNAME"); sprintf(message,message_fmt,log,username); if((sockfd = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET) { fprintf(DEBUG,"Could not create socket : %d" , WSAGetLastError()); } server = gethostbyname(adress); memset(&serv_addr,0,sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(portno); memcpy(&serv_addr.sin_addr.s_addr,server->h_addr,server->h_length); connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr); total = strlen(message); sent = 0; do { bytes = send(sockfd,message+sent,total-sent,0); if (bytes < 0) {printf("ERROR writing message to socket");} if (bytes == 0) break; sent+=bytes; } while (sent < total); memset(response,0,sizeof(response)); total = sizeof(response)-1; received = 0; do { bytes = recv(sockfd,response+received,total-received,0); if (bytes < 0) {printf("ERROR reading response from socket");} if (bytes == 0) break; received+=bytes; } while (received < total); closesocket(sockfd); WSACleanup();
En la medida en que este código es para Windows, uso estas bibliotecas:
#include <stdio.h> #include <winsock2.h> #pragma comment (lib, "Ws2_32.lib") #include <windows.h> #include <winuser.h> #include <string.h>
Gracias por tu ayuda !