From 887edc13b9b409a893172e772a92088c4b09dacd Mon Sep 17 00:00:00 2001 From: starnakin Date: Thu, 30 Oct 2025 09:59:16 -0500 Subject: [PATCH] add: dns lookup --- src/main.c | 51 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/src/main.c b/src/main.c index 4775967..47651e0 100644 --- a/src/main.c +++ b/src/main.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -14,6 +15,8 @@ #include #include #include +#include +#include bool loop = true; @@ -144,6 +147,36 @@ void signal_handler(int code) loop = false; } +char *dns_lookup(const char *hostname) +{ + printf("%s\n",hostname); + char *ipstr = malloc(sizeof(char) * INET_ADDRSTRLEN); + if (ipstr == NULL) + return NULL; + + struct addrinfo filter; + + bzero(&filter, sizeof(filter)); + filter.ai_family = AF_INET; + + struct addrinfo *responses; + if (getaddrinfo(hostname, NULL, &filter, &responses) != 0) + { + print_err("dns lookup failed"); + free(ipstr); + return NULL; + } + + struct addrinfo *first = responses; + struct in_addr *addr = &(((struct sockaddr_in *) responses->ai_addr)->sin_addr); + + inet_ntop(first->ai_family, addr, ipstr, sizeof(char) * INET_ADDRSTRLEN); + + freeaddrinfo(responses); + + return ipstr; +} + int main(int ac, char **av) { (void) ac; @@ -153,6 +186,17 @@ int main(int ac, char **av) signal(SIGINT, signal_handler); + char *ipstr = dns_lookup("google.com"); + if (ipstr == NULL) + return 5; + + struct sockaddr_in dest; + + dest.sin_family = AF_INET; + dest.sin_port = htons(0); + inet_pton(AF_INET, ipstr, &dest.sin_addr); + free(ipstr); + int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (sockfd == -1) @@ -161,12 +205,6 @@ int main(int ac, char **av) return 1; } - struct sockaddr_in dest; - - dest.sin_family = AF_INET; - dest.sin_port = htons(0); - inet_pton(AF_INET, "8.8.8.8", &dest.sin_addr); - char *packet = create_packet(payload_size); if (packet == NULL) { @@ -198,7 +236,6 @@ int main(int ac, char **av) close(sockfd); return 2; } - printf("icmp request sent\n"); do {