121 lines
2.1 KiB
C
121 lines
2.1 KiB
C
#include "../src/hammer.h"
|
|
|
|
enum DNSTokenType_ {
|
|
TT_dns_message_t = TT_USER,
|
|
TT_dns_header_t,
|
|
TT_dns_label_t,
|
|
TT_dns_qname_t,
|
|
TT_dns_question_t,
|
|
TT_dns_rr_t,
|
|
TT_dns_rr_txt_t,
|
|
TT_dns_rr_hinfo_t,
|
|
TT_dns_rr_minfo_t,
|
|
TT_dns_rr_mx_t,
|
|
TT_dns_rr_soa_t,
|
|
TT_dns_rr_wks_t,
|
|
TT_dns_rr_null_t,
|
|
TT_dns_domain_t,
|
|
TT_dns_cstr_t
|
|
};
|
|
|
|
typedef char *dns_domain_t;
|
|
typedef uint8_t *dns_cstr_t;
|
|
|
|
typedef struct dns_header {
|
|
uint16_t id;
|
|
bool qr, aa, tc, rd, ra;
|
|
char opcode, rcode;
|
|
size_t question_count;
|
|
size_t answer_count;
|
|
size_t authority_count;
|
|
size_t additional_count;
|
|
} dns_header_t;
|
|
|
|
typedef struct dns_label {
|
|
size_t len;
|
|
uint8_t *label;
|
|
} dns_label_t;
|
|
|
|
typedef struct dns_qname {
|
|
size_t qlen;
|
|
dns_label_t *labels;
|
|
} dns_qname_t;
|
|
|
|
typedef struct dns_question {
|
|
dns_qname_t qname;
|
|
uint16_t qtype;
|
|
uint16_t qclass;
|
|
} dns_question_t;
|
|
|
|
typedef struct {
|
|
dns_cstr_t cpu;
|
|
dns_cstr_t os;
|
|
} dns_rr_hinfo_t;
|
|
|
|
typedef struct {
|
|
char* rmailbx;
|
|
char* emailbx;
|
|
} dns_rr_minfo_t;
|
|
|
|
typedef struct {
|
|
uint16_t preference;
|
|
char* exchange;
|
|
} dns_rr_mx_t;
|
|
|
|
typedef struct {
|
|
char* mname;
|
|
char* rname;
|
|
uint32_t serial;
|
|
uint32_t refresh;
|
|
uint32_t retry;
|
|
uint32_t expire;
|
|
uint32_t minimum;
|
|
} dns_rr_soa_t;
|
|
|
|
typedef struct {
|
|
size_t count;
|
|
uint8_t** txt_data;
|
|
} dns_rr_txt_t;
|
|
|
|
typedef struct {
|
|
uint32_t address;
|
|
uint8_t protocol;
|
|
size_t len;
|
|
uint8_t* bit_map;
|
|
} dns_rr_wks_t;
|
|
|
|
typedef uint8_t *dns_rr_null_t;
|
|
|
|
typedef struct dns_rr {
|
|
char* name;
|
|
uint16_t type;
|
|
uint16_t class;
|
|
uint32_t ttl; // cmos is also acceptable.
|
|
uint16_t rdlength;
|
|
union {
|
|
uint32_t a;
|
|
char* ns;
|
|
char* md;
|
|
char* mf;
|
|
char* cname;
|
|
dns_rr_soa_t soa;
|
|
char* mb;
|
|
char* mg;
|
|
char* mr;
|
|
dns_rr_null_t null;
|
|
dns_rr_wks_t wks;
|
|
char* ptr;
|
|
dns_rr_hinfo_t hinfo;
|
|
dns_rr_minfo_t minfo;
|
|
dns_rr_mx_t mx;
|
|
dns_rr_txt_t txt;
|
|
};
|
|
} dns_rr_t;
|
|
|
|
typedef struct dns_message {
|
|
dns_header_t header;
|
|
dns_question_t *questions;
|
|
dns_rr_t *answers;
|
|
dns_rr_t *authority;
|
|
dns_rr_t *additional;
|
|
} dns_message_t;
|