Created a file for the dns lookup function

unix_test
anulax1225 ago%!(EXTRA string=1 year)
parent 0196d77f1e
commit 5656e1ddd7
  1. 41
      bakanet/src/bakanet/dns_lookup.cpp
  2. 14
      bakanet/src/bakanet/dns_lookup.h

@ -0,0 +1,41 @@
#include "dns_lookup.h"
namespace Bk::Net {
std::vector<std::string> dns_lookup(const std::string &host_name, IpVersion ipv)
{
std::vector<std::string> output;
struct addrinfo hints, *res, *p;
int status, ai_family;
char ip_address[INET6_ADDRSTRLEN];
ai_family = (int)ipv;
memset(&hints, 0, sizeof hints);
hints.ai_family = ai_family;
hints.ai_socktype = SOCK_STREAM;
if ((status = getaddrinfo(host_name.c_str(), NULL, &hints, &res)) != 0) {
output.push_back("");
return output;
}
for(p = res;p != NULL; p = p->ai_next) {
void *addr;
if (p->ai_family == AF_INET) { // IPv4
struct sockaddr_in *ipv4 = (struct sockaddr_in *)p->ai_addr;
addr = &(ipv4->sin_addr);
} else { // IPv6
struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)p->ai_addr;
addr = &(ipv6->sin6_addr);
}
// convert the IP to a string
inet_ntop(p->ai_family, addr, ip_address, sizeof ip_address);
output.push_back(ip_address);
}
freeaddrinfo(res); // free the linked list
return output;
}
}

@ -0,0 +1,14 @@
#pragma once
#include <vector>
#include <iostream>
#include <cstring>
#include <string>
#include <netdb.h>
#include <arpa/inet.h>
#include "ip_version.h"
namespace Bk::Net {
std::vector<std::string> dns_lookup(const std::string &host_name, IpVersion ipv);
}
Loading…
Cancel
Save