From 0f826d0a73bb1bbed0dd38b914be40ca8dc491ea Mon Sep 17 00:00:00 2001
From: Joel Grunbaum <joelgrun@gmail.com>
Date: Sun, 18 Oct 2020 12:35:02 +0000
Subject: [PATCH] Buf is passed in so can be read separately, removed functions from header
---
main.c | 4 +++-
dns.h | 4 +---
dns.c | 16 +++++++---------
3 files changed, 11 insertions(+), 13 deletions(-)
diff --git a/dns.c b/dns.c
index 042902b..233050a 100644
--- a/dns.c
+++ b/dns.c
@@ -9,6 +9,9 @@
#include <unistd.h>
#include "dns.h"
+void change_to_DNS_name_format(unsigned char* dns, unsigned char* host);
+char* read_name(unsigned char* reader, unsigned char* buffer, int* count);
+
// DNS code copied from
// https://gist.github.com/fffaraz/9d9170b57791c28ccda9255b48315168
@@ -26,7 +29,7 @@
unsigned char ad :1; //authenticated data
unsigned char z :1; //reserved for future use
unsigned char ra :1; //recursion available
- unsigned short q_count; //number of question entries
+ unsigned short q_count; //number of question entrise
unsigned short ans_count; //number of answer entries
unsigned short auth_count; //number of authority entries
unsigned short add_count; //number of resource entries
@@ -65,11 +68,11 @@
unsigned char* rdata;
};
-void resolve(char* hostname, char* dns_ip, int query_type, int read)
+void resolve(unsigned char* buf, char* hostname, char* dns_ip, int query_type)
{
int s, i, j;
struct sockaddr_in dest, a;
- unsigned char buf[65536], *qname, *reader;
+ unsigned char *qname, *reader;
struct DNS_HEADER* dns = NULL;
struct QUESTION* qinfo = NULL;
@@ -79,7 +82,7 @@
dest.sin_addr.s_addr = inet_addr(dns_ip);
//dns packet header
- dns = (struct DNS_HEADER*)&buf;
+ dns = (struct DNS_HEADER*)buf;
dns->id = (unsigned short) htons(getpid());
dns->qr = 0; //make query
dns->opcode = 0; //standard query
@@ -111,11 +114,6 @@
//negative return is a fail
i = sizeof(dest);
recvfrom(s, (char*)buf, 65536, 0, (struct sockaddr*)&dest, (socklen_t*)&i);
-
- //read response
- if (read) {
- print_packet(buf);
- }
return;
}
diff --git a/dns.h b/dns.h
index 9efc90f..b6e6a90 100644
--- a/dns.h
+++ b/dns.h
@@ -8,7 +8,5 @@
#define T_TXT 16 // Text record
#define T_AAAA 28 // IPv6 address
-void resolve(char* hostname, char* dns_ip, int query_type, int read);
+void resolve(unsigned char* buf, char* hostname, char* dns_ip, int query_type);
void print_packet(unsigned char* buf);
-void change_to_DNS_name_format(unsigned char* dns, unsigned char* host);
-char* read_name(unsigned char* reader, unsigned char* buffer, int* count);
diff --git a/main.c b/main.c
index 1e36b9e..cc01df3 100644
--- a/main.c
+++ b/main.c
@@ -2,6 +2,8 @@
int main(int argc, char** argv)
{
- resolve("google.com", "1.1.1.1", T_A, 1);
+ unsigned char buf[65536];
+ resolve(buf, "google.com", "1.1.1.1", T_A);
+ print_packet(buf);
return 0;
}
--
Gitblit v1.10.0