Я пытаюсь создать программу на C, которая использует сокет через прокси-сервер TOR для отправки запроса GET на сайт, через который проходит пользователь при запуске программы.Программа отлично компилируется, подключается и нормально взаимодействует, но сервер продолжает выдавать ошибку при попытке отправить запрос в домен.
Я пробовал несколько способов исправить это, но пока что ни один из них не работает,Вот мой код:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main(int argc, char **argv) {
if(!argv[1]) {
printf("Usage: %s [HOST]\n",argv[0]);
exit(1);
}
char *host = argv[1];
struct sockaddr_in server;
int s = socket(AF_INET, SOCK_STREAM, 0);
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("192.168.1.20"); //TOR server address
server.sin_port = htons( 9050 );
connect(s, (struct sockaddr*)&server, sizeof(server));
char request1[3] = (char []) { 0x05, 0x01, 0x00 };
send(s, request1, 3, 0);
char response1[2];
recv(s, response1, 2, 0);
short port = htons(80);
char host_len = (char)strlen(host);
char* request2[4+1+host_len+2];
char tempRequestHolder[4] = (char []) { 0x05, 0x01, 0x00, 0x03 };
memcpy(request2, tempRequestHolder, 4);
memcpy(request2 + 4, &host_len, 1);
memcpy(request2 + 5, host, host_len);
memcpy(request2 + 5 + host_len, &port, 2);
send(s, (char *)request2, 4 + 1 + host_len + 2, 0);
char response2[10];
recv(s, response2, 10, 0);
char * request = "GET / HTTP/1.0\r\n\r\n";
char buf[2048];
unsigned int rec = recv(s, buf, 2048, 0);
printf("\n%s\n",buf);
return 0;
}
Когда он работает:
./tor-client some-site.com
Сервер TOR возвращает эту ошибку:
[warn] Your application (using socks5 to port 0) gave Tor a malformed hostname: [scrubbed]. Rejecting the connection.
У меня проблемы с выяснениемотносительно того, почему это происходит, и попытались несколько способов исправить это, но не повезло.Любая помощь / ответ будет высоко ценится!
Спасибо.