Имитация GET-запроса на стороне сервера для программы на C - PullRequest
0 голосов
/ 26 января 2019

В настоящее время я изучаю скомпилированную программу на Си.Я знаю, что он делает несколько сетевых запросов из-за нескольких вызовов socket, gethostbyname и connect по всему коду.Кроме того, я знаю, что он делает запрос GET, потому что я запустил strings в программе и нашел один.

Я хотел бы запустить эту программу, чтобы я мог исследовать ее, не создавая сетьзвонки;однако для этого мне нужно было бы смоделировать запрос get только с данными функциями.

У меня есть следующий код, который я скомпилировал и добавил в LD_PRELOAD:

#include <netdb.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>

int socket(int domain, int type, int protocol) {
    fprintf(stderr, "socket(%d, %d, %d)\n", domain, type, protocol);
    // TODO Return actual socket which contains request
    return 1;
}

struct hostent HOST;
struct hostent *gethostbyname(const char*name) {
    fprintf(stderr, "gethostbyname(%s)\n", name);
    return &HOST;
}

int connect(int sockfd, const struct sockaddr *addr, socklen_t addr_len) {
    int name_len = addr_len - sizeof(struct sockaddr);
    fprintf(stderr, "Connecting to: %*.s\n", name_len, addr->sa_data);
    return 0;
}

Кажется, что это работает, но я не могу понять, что он печатает и получает из сокета.

Я также открыт для других решений проблемы.

...