Je veux interroger un serveur spécifique, et obtenir le résultat de la même manière que nous l'obtenons via getaddrinfo
. Je veux obtenir une struct addrinfo
, donc je peux avoir l'ip, le port et un pointeur vers le résultat suivant. J'utilise le code ci-dessous, qui interroge le serveur que je veux, et obtient les résultats. Mais chaque résultat est à une autre structure et ils ne se pointent pas les uns les autres (pas dans une liste).Interroger un serveur et obtenir les résultats en tant que structure addrinfo
Voici le code:
static int my_getaddrinfo(const char *dns_server_s, const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res) {
int retValue = 1;
struct __res_state result;
char ip[16];
memset(ip, '\0', sizeof(ip));
res_ninit(&result);
struct in_addr addr;
inet_aton(dns_server_s, &addr);
result.nsaddr_list[0].sin_addr = addr;
result.nsaddr_list[0].sin_family = AF_INET;
result.nsaddr_list[0].sin_port = htons(NS_DEFAULTPORT);
result.nscount = 1;
u_char answer[NS_PACKETSZ];
int len = res_nquery(&result, node, ns_c_in, ns_t_a, answer, sizeof(answer));
ns_msg handle;
ns_initparse(answer, len, &handle);
if(ns_msg_count(handle, ns_s_an) > 0) {
ns_rr rr;
if(ns_parserr(&handle, ns_s_an, 0, &rr) == 0) {
strcpy(ip, inet_ntoa(*(struct in_addr *)ns_rr_rdata(rr)));
getaddrinfo(ip, service, hints, res);
retValue = 0;
}
}
return retValue;
}
Est-il possible d'obtenir les résultats de la façon dont je veux? quelque chose de similaire à addrinfo struct?
Edit: je peux voir que je reçois trois réponses ns_msg_count(handle, ns_s_an) = 3
et pour accéder à chaque réponse que je devrais appeler ns_parserr(&handle, ns_s_an, answer_index, &rr)
Mais comme je le disais, je veux obtenir ces réponses comme une liste comme je les reçois en appelant getaddrinfo
.
Avez-vous fait quoi que ce soit essayé? D'après votre description, il semble que vous sachiez ce que vous faites, alors où est exactement votre problème? Recherchez quel paramètre est l'index dans le jeu de résultats (je suppose que c'est le '0'), parcourez les résultats et créez une liste de' addrinfo's au fur et à mesure. – Phillip
Je sais que je peux obtenir in_addr, mais comment puis-je obtenir des addrinfos à partir du résultat? – Roee84
Ou vous voulez juste appeler getaddrinfo pour chaque ip .. – Roee84