diff options
| author | liuxueli <[email protected]> | 2020-04-30 10:56:32 +0800 |
|---|---|---|
| committer | liuxueli <[email protected]> | 2020-04-30 10:56:32 +0800 |
| commit | d62344559f6f4328adfb0b89d28073d092e9e532 (patch) | |
| tree | 5eac15ad1b65ac0a38e7e88aff44eb7c2c516fe7 | |
| parent | 34689df78b0074f9ee3a25eaa3ca7ee188a6af17 (diff) | |
将dns.h头文件从src目录移至include目录
修改CMakeLists.txt,指定dns.h头文件目录
| -rw-r--r-- | CMakeLists.txt | 1 | ||||
| -rw-r--r-- | include/dns.h | 349 |
2 files changed, 350 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 740c640..632b8c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,7 @@ elseif(ENABLE_SANITIZE_THREAD) endif() # end of for ASAN +include_directories(${PROJECT_SOURCE_DIR}/include) include_directories(/opt/MESA/include/MESA/) file(GLOB SRC diff --git a/include/dns.h b/include/dns.h new file mode 100644 index 0000000..ed7512e --- /dev/null +++ b/include/dns.h @@ -0,0 +1,349 @@ +#ifndef DNS_ANALYSE_H +#define DNS_ANALYSE_H + +#include <MESA/cJSON.h> + +#ifndef u_char +#define u_char unsigned char +#endif + +#ifndef u_int16_t +#define u_int16_t unsigned short +#endif + +#ifndef u_int32_t +#define u_int32_t unsigned int //adjust by lqy 20070521 long to int +#endif + +#define G_DNS_TTL (rand()%1800+1800)//0.5->1hour 2015.01.26by ljp + +#define MAX_CHEAT_PKT_PAYLOAD_LEN 512 + +#define DNS_MAX_SALT 256 +#define DNS_MAX_OWNER 256 +#define DNS_MAX_MAPS 256 +#define DNS_MAX_PUBLIC_KEY 256 +#define DNS_MAX_SIGNER_NAME 256 +#define DNS_MAX_SIGNATURE 256 +#define DNS_MAX_DIGEST 256 +#define DNS_MAX_TARGET 256 + +#define DNS_HINFO_MAX_CPU 40 +#define DNS_HINFO_MAX_OS 40 +#define DNS_MAX_NAME 255 + +/* RR type */ +#define DNS_TYPE_A 1 +#define DNS_TYPE_NS 2 +#define DNS_TYPE_MD 3 +#define DNS_TYPE_MF 4 +#define DNS_TYPE_CNAME 5 +#define DNS_TYPE_SOA 6 +#define DNS_TYPE_MB 7 +#define DNS_TYPE_MG 8 +#define DNS_TYPE_MR 9 +#define DNS_TYPE_NULL 10 +#define DNS_TYPE_WKS 11 +#define DNS_TYPE_PTR 12 +#define DNS_TYPE_HINFO 13 +#define DNS_TYPE_MINFO 14 +#define DNS_TYPE_MX 15 +#define DNS_TYPE_TXT 16 +#define DNS_TYPE_RP 17 +#define DNS_TYPE_ISDN 20 +#define DNS_TYPE_AAAA 28 //dns_ipv6 +#define DNS_TYPE_SRV 33 +#define DNS_TYPE_DNAME 39 +#define DNS_TYPE_OPT 41 +#define DNS_TYPE_DS 43 +#define DNS_TYPE_RRSIG 46 +#define DNS_TYPE_NSEC 47 +#define DNS_TYPE_DNSKEY 48 +#define DNS_TYPE_NSEC3 50 +#define DNS_TYPE_NSEC3PARAM 51 +#define DNS_QTYPE_AXFR 252 +#define DNS_QTYPE_MAILB 253 +#define DNS_QTYPE_MAILA 254 +#define DNS_QTYPE_ANY 255 +#define DNS_TYPE_DLV 32769 /* DSNSEC Lokkaside Validation */ +#define DNS_TYPE_UNKNOWN 65534 + +#define DNS_CLASS_UNKNOWN 0 +#define DNS_CLASS_IN 1 +#define DNS_CLASS_CS 2 +#define DNS_CLASS_CH 3 +#define DNS_CLASS_HS 4 +#define DNS_QCLASS_ANY 255 + +typedef struct _dns_hdr +{ + u_int16_t id; +#if __BYTE_ORDER == __LITTLE_ENDIAN + u_char rd:1; + u_char tc:1; + u_char aa:1; + u_char opcode:4; + u_char qr:1; + u_char rcode:4; + u_char z:3; + u_char ra:1; +#elif __BYTE_ORDER == __BIG_ENDIAN + u_char qr:1; + u_char opcode:4; + u_char aa:1; + u_char tc:1; + u_char rd:1; + u_char ra:1; + u_char z:3; + u_char rcode:4; +#endif + u_int16_t qdcount; + u_int16_t ancount; + u_int16_t aucount;//authority count + u_int16_t adcount;//additional count +} dns_hdr_t; + +typedef struct _hinfo +{ + u_char os_len; + u_char cpu_len; + u_char cpu[DNS_HINFO_MAX_CPU+1]; + u_char os[DNS_HINFO_MAX_OS+1]; +}hinfo_t; + +typedef struct _minfo +{ + u_char rmailbx[DNS_MAX_NAME+1]; + u_char emailbx[DNS_MAX_NAME+1]; +}minfo_t; + +typedef struct _mx +{ + u_int16_t preference; + u_char exchange[DNS_MAX_NAME+1]; +}mx_t; + +typedef struct _soa +{ + u_char mname[DNS_MAX_NAME+1]; + u_char rname[DNS_MAX_NAME+1]; + u_int32_t serial; + u_int32_t refresh; + u_int32_t retry; + u_int32_t expire; + u_int32_t minimum; +}soa_t; + +typedef struct _rp_t +{ + u_char mailbox[DNS_MAX_NAME+1]; + u_char txt_rr[DNS_MAX_NAME+1]; +}rp_t; + +typedef struct _txt_t +{ + u_char txt[DNS_MAX_NAME+1]; + u_char size; +}txt_t; + +typedef struct _null +{ + u_char null[DNS_MAX_NAME+1]; + u_char size; +}null_t; + +typedef struct _wks +{ + u_char protocol; + u_int32_t addr; + u_int32_t size; + u_char * bitmap; +}wks_t; + +typedef struct _srv +{ + u_int16_t priority; + u_int16_t weight; + u_int16_t port; + u_char target[DNS_MAX_TARGET]; +}srv_t; + +typedef struct _ds +{ + u_int16_t key_tag; + u_char algo; + u_char digest_type; + u_int32_t digest_len; + u_char *digest; +}ds_t; + + +typedef struct _rrsig +{ + u_int16_t type_covered; + u_char algo; + u_char labels; + u_int32_t original_ttl; + u_int32_t sig_expiration; + u_int32_t sig_inception; + u_int32_t key_tag; + u_int32_t signature_len; + u_char signer_name[DNS_MAX_SIGNER_NAME]; + u_char *signature; +}rrsig_t; + +typedef struct _nsec +{ + u_int16_t maps_len; + u_char next_domain[DNS_MAX_OWNER]; + u_char type_bit_maps[DNS_MAX_MAPS]; +}nsec_t; + +typedef struct _dnskey +{ + u_int16_t flags; + u_char protocol; + u_char algo; + u_int32_t public_key_len; + u_char *public_key; +}dnskey_t; + + +typedef struct _nsec3 +{ + u_char hash_algo; + u_char flags; + u_char salt_len; + u_char hash_len; + u_int16_t iteration; + u_int16_t maps_len; + u_char *salt_value; + u_char *next_hash_owner; + u_char type_bit_maps[DNS_MAX_MAPS]; +}nsec3_t; + +typedef struct _nsec3param +{ + u_char hash_algo; + u_char flags; + u_char salt_len; + u_int16_t iteration; + u_char *salt_value; +}nsec3param_t; + +typedef struct _dns_rr +{ + u_char name[DNS_MAX_NAME+1]; + u_int16_t type; + u_int16_t rr_class; + u_int32_t ttl; /* 1byte: extended RCODE; 1byte: version; 2bytes: Z(upper bit) if type is OPT */ + u_int16_t rdlength; + union + { + u_char cname[DNS_MAX_NAME + 1]; /* cname[DNS_MAX_NAME + 1]; */ + hinfo_t hinfo; + u_char mb[DNS_MAX_NAME + 1]; /* mb[DNS_MAX_NAME + 1]; */ + u_char md[DNS_MAX_NAME + 1]; /* md[DNS_MAX_NAME + 1]; */ + u_char mf[DNS_MAX_NAME + 1]; /* mf[DNS_MAX_NAME + 1]; */ + u_char mg[DNS_MAX_NAME + 1]; /* mg[DNS_MAX_NAME + 1]; */ + minfo_t minfo; + u_char mr[DNS_MAX_NAME + 1]; /* mr[DNS_MAX_NAME + 1]; */ + mx_t mx; + u_char ns[DNS_MAX_NAME + 1]; /* ns[DNS_MAX_NAME + 1]; */ + u_char ptr[DNS_MAX_NAME + 1]; /* ptr[DNS_MAX_NAME + 1]; */ + soa_t soa; + u_char a[DNS_MAX_NAME + 1]; + u_char aaaa[DNS_MAX_NAME + 1]; /* aaaa[16]; */ + u_char dname[DNS_MAX_NAME + 1]; + u_char isdn[DNS_MAX_NAME + 1]; + u_char unknown_data[DNS_MAX_NAME + 1]; + txt_t txt; + rp_t rp; + null_t null; + wks_t wks; + srv_t srv; + ds_t ds; + rrsig_t rrsig; + nsec_t nsec; + dnskey_t dnskey; + nsec3_t nsec3; + nsec3param_t nsec3param; + } rdata; +} dns_rr_t; + +typedef struct _fake_packet_opt +{ + u_int16_t cfg_type; /* IP or STR */ + u_int16_t res_type; + u_int32_t ttl; + u_int32_t res_len; + u_char res_info[DNS_MAX_NAME+1]; +}cheat_pkt_opt_t; + +typedef struct +{ + u_int16_t qtype; + u_int16_t qclass; + u_char qname[DNS_MAX_NAME+1]; +} dns_query_question_t; + +#define MAX_RR_NUM 256 + +typedef struct _dns_info +{ + dns_hdr_t hdr_info; + int rr_count; + dns_rr_t rr[MAX_RR_NUM]; + dns_query_question_t query_question; +}dns_info_t; + + + +enum flag_id +{ + /* ������ֶ�ʱ�������Զ�����ͷ����Ϣ */ + DNS_UNKOWN =0, + DNS_ALL = 1<<0, /* ȫ�� */ + DNS_REQ_ALL = 1<<1, /* �����ȫ�� */ + DNS_RES_ALL = 1<<2, /* ���Ӧ���ȫ������ */ + DNS_REQ_HDR = 1<<3, /* �������ͷ������ */ + DNS_RES_HDR = 1<<4, /* ��Ӧ���ͷ������ */ + //DNS_REQ_QUERY = 1<<5, /* ��Ӧ����е�������Ϣ(������������ѯ��Ϣ���Զ�����ͷ������ΪDNS_REQ_ALL_FLAG_ID������û��Ҫ����һ��ֵ) */ + DNS_RES_QUERY = 1<<6, /* ��Ӧ����е�������Ϣ */ + DNS_RES_RRS = 1<<7, /* ������Ӧ����Դ��¼ */ + DNS_RES_ANSWER = 1<<8, /* ��answerӦ���¼ */ + DNS_RES_AUTH = 1<<9, /* ����Ȩ��Դ��¼ */ + DNS_RES_ADD = 1<<10, /* �⸽����Դ��¼ */ +}; + + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* +* name:build_dns_payload +* functionality:build dns packet +* param: +* pay_load_buf:the thread num +* len:buffer length +* pkt_para:option parameter +* opt_cnt:option counts +* +* returns: +* >0:build sucess +* -1:ibuild failed +* +* */ + +int get_rr_str2json(cJSON *object, dns_info_t *dns_info, int *dns_sec); +int get_rr_content2buf(dns_rr_t *rr, int rr_count, char *rr_buf, int buflen, int *dns_sec); +int dns_save_raw_pkt(char *buf, int buflen, const struct streaminfo * a_stream); +int build_cheat_pkt(unsigned char *payload, int payload_len, dns_query_question_t *query_question, cheat_pkt_opt_t *cheat_opt, int cheat_opt_num); + +#ifdef __cplusplus +} +#endif +#endif + |
