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