add: dns lookup

This commit is contained in:
2025-10-30 09:59:16 -05:00
parent 2038f5364f
commit 887edc13b9

View File

@ -4,6 +4,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
@ -14,6 +15,8 @@
#include <fcntl.h>
#include <sys/time.h>
#include <stdbool.h>
#include <sys/socket.h>
#include <netdb.h>
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
{