parent
							
								
									0196d77f1e
								
							
						
					
					
						commit
						5656e1ddd7
					
				
				 2 changed files with 55 additions and 0 deletions
			
			
		| @ -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…
					
					
				
		Reference in New Issue