From 5656e1ddd7871036aee45a9aa327092e2020fc47 Mon Sep 17 00:00:00 2001 From: anulax1225 Date: Sat, 2 Mar 2024 17:22:08 +0100 Subject: [PATCH] Created a file for the dns lookup function --- bakanet/src/bakanet/dns_lookup.cpp | 41 ++++++++++++++++++++++++++++++ bakanet/src/bakanet/dns_lookup.h | 14 ++++++++++ 2 files changed, 55 insertions(+) create mode 100644 bakanet/src/bakanet/dns_lookup.cpp create mode 100644 bakanet/src/bakanet/dns_lookup.h diff --git a/bakanet/src/bakanet/dns_lookup.cpp b/bakanet/src/bakanet/dns_lookup.cpp new file mode 100644 index 0000000..c59e072 --- /dev/null +++ b/bakanet/src/bakanet/dns_lookup.cpp @@ -0,0 +1,41 @@ +#include "dns_lookup.h" + +namespace Bk::Net { + std::vector dns_lookup(const std::string &host_name, IpVersion ipv) + { + std::vector 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; + } +} \ No newline at end of file diff --git a/bakanet/src/bakanet/dns_lookup.h b/bakanet/src/bakanet/dns_lookup.h new file mode 100644 index 0000000..e93d2cb --- /dev/null +++ b/bakanet/src/bakanet/dns_lookup.h @@ -0,0 +1,14 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +#include "ip_version.h" + +namespace Bk::Net { + std::vector dns_lookup(const std::string &host_name, IpVersion ipv); +} \ No newline at end of file