From bd233a08f794107b51fe5c72334f792441248d9c Mon Sep 17 00:00:00 2001 From: liuxueli Date: Fri, 29 Nov 2019 16:37:17 +0800 Subject: 增加资源记录转JSON的接口 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dns.cpp | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 1 deletion(-) diff --git a/src/dns.cpp b/src/dns.cpp index e1d88e3..4b0888d 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -30,7 +30,7 @@ #include "dns.h" #include "dns_internal.h" -int DNS_PROTOCOL_VERSION_20190923; +int DNS_PROTOCOL_VERSION_20191127; unsigned long long dns_register_flag = 0; unsigned short dns_plugid = 0; static pthread_mutex_t dns_lock; @@ -81,6 +81,203 @@ const unsigned char PCAP_FILE_HEAD[24] = {0xD4, 0xC3, 0xB2, 0xA1, 0x02, 0x00, 0x 0xFF, 0xFF, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00}; +int get_rr_str2json(cJSON *object, dns_info_t *dns_info, int *dns_sec) +{ + int i=0; + char ip_str[128]; + dns_rr_t *dns_rr=NULL; + cJSON *one_rr_object=NULL; + cJSON *dns_hdr_object=NULL; + cJSON *dns_flags_object=NULL; + cJSON *dns_question_array=NULL; + cJSON *one_question_object=NULL; + cJSON *dns_rr_array=NULL; + + if(object==NULL || dns_info==NULL || dns_sec==NULL) + { + return -1; + } + + dns_rr_array=cJSON_CreateArray(); + dns_hdr_object=cJSON_CreateObject(); + dns_flags_object=cJSON_CreateObject(); + dns_question_array=cJSON_CreateArray(); + + for(i = 0; i < dns_info->rr_count; i++) + { + one_rr_object=cJSON_CreateObject(); + dns_rr = &(dns_info->rr[i]); + + if(dns_rr->type == DNS_TYPE_OPT) + { + cJSON_AddStringToObject(one_rr_object, "name", (const char *)(dns_rr->name)); + cJSON_AddNumberToObject(one_rr_object, "type", dns_rr->type); + cJSON_AddNumberToObject(one_rr_object, "udp_payload", dns_rr->rr_class); + cJSON_AddNumberToObject(one_rr_object, "rcode", (int)(dns_rr->ttl>>24)); + cJSON_AddNumberToObject(one_rr_object, "version", (int)((dns_rr->ttl>>16)&0xFF)); + cJSON_AddNumberToObject(one_rr_object, "Z", (int)(dns_rr->ttl&&0xFFFF)); + cJSON_AddNumberToObject(one_rr_object, "rdlength", dns_rr->rdlength); + } + else + { + cJSON_AddStringToObject(one_rr_object, "name", (const char *)(dns_rr->name)); + cJSON_AddNumberToObject(one_rr_object, "type", dns_rr->type); + cJSON_AddNumberToObject(one_rr_object, "class", dns_rr->rr_class); + cJSON_AddNumberToObject(one_rr_object, "ttl", dns_rr->ttl); + cJSON_AddNumberToObject(one_rr_object, "rdlength", dns_rr->rdlength); + } + + if(dns_rr->rdata.a==NULL) + { + cJSON_AddItemToArray(dns_rr_array, one_rr_object); + continue; + } + + switch(dns_rr->type) + { + case DNS_TYPE_A: + inet_ntop(AF_INET, (void *)(dns_rr->rdata.a), ip_str, sizeof(ip_str)); + cJSON_AddStringToObject(one_rr_object, "a", ip_str); + break; + case DNS_TYPE_NS: + cJSON_AddStringToObject(one_rr_object, "ns", (const char *)(dns_rr->rdata.ns)); + break; + case DNS_TYPE_MD: + cJSON_AddStringToObject(one_rr_object, "md", (const char *)(dns_rr->rdata.md)); + break; + case DNS_TYPE_MF: + cJSON_AddStringToObject(one_rr_object, "mf", (const char *)(dns_rr->rdata.mf)); + break; + case DNS_TYPE_CNAME: + cJSON_AddStringToObject(one_rr_object, "cname", (const char *)(dns_rr->rdata.cname)); + break; + case DNS_TYPE_SOA: + cJSON_AddStringToObject(one_rr_object, "mname", (const char *)(dns_rr->rdata.soa.mname)); + cJSON_AddStringToObject(one_rr_object, "rname", (const char *)(dns_rr->rdata.soa.rname)); + cJSON_AddNumberToObject(one_rr_object, "serial", dns_rr->rdata.soa.serial); + cJSON_AddNumberToObject(one_rr_object, "refresh", dns_rr->rdata.soa.refresh); + cJSON_AddNumberToObject(one_rr_object, "retry", dns_rr->rdata.soa.retry); + cJSON_AddNumberToObject(one_rr_object, "cname", dns_rr->rdata.soa.expire); + cJSON_AddNumberToObject(one_rr_object, "minimum", dns_rr->rdata.soa.minimum); + break; + case DNS_TYPE_MB: + cJSON_AddStringToObject(one_rr_object, "mb", (const char *)(dns_rr->rdata.mb)); + break; + case DNS_TYPE_MG: + cJSON_AddStringToObject(one_rr_object, "mg", (const char *)(dns_rr->rdata.mg)); + break; + case DNS_TYPE_MR: + cJSON_AddStringToObject(one_rr_object, "mr", (const char *)(dns_rr->rdata.mr)); + break; + case DNS_TYPE_NULL: + cJSON_AddNumberToObject(one_rr_object, "size", dns_rr->rdata.null.size); + cJSON_AddStringToObject(one_rr_object, "null", (const char *)(dns_rr->rdata.null.null)); + break; + case DNS_TYPE_WKS: + cJSON_AddStringToObject(one_rr_object, "addr", ip_str); + cJSON_AddNumberToObject(one_rr_object, "protocol", dns_rr->rdata.wks.protocol); + cJSON_AddStringToObject(one_rr_object, "bitmap", (const char *)(dns_rr->rdata.wks.bitmap)); + cJSON_AddNumberToObject(one_rr_object, "size", dns_rr->rdata.wks.size); + break; + case DNS_TYPE_PTR: + cJSON_AddStringToObject(one_rr_object, "ptr", (const char *)(dns_rr->rdata.ptr)); + break; + case DNS_TYPE_HINFO: + cJSON_AddStringToObject(one_rr_object, "cpu", (const char *)(dns_rr->rdata.hinfo.cpu)); + cJSON_AddStringToObject(one_rr_object, "os", (const char *)(dns_rr->rdata.hinfo.os)); + break; + case DNS_TYPE_MINFO: + cJSON_AddStringToObject(one_rr_object, "rmailbx", (const char *)(dns_rr->rdata.minfo.rmailbx)); + cJSON_AddStringToObject(one_rr_object, "emailbx", (const char *)(dns_rr->rdata.minfo.emailbx)); + break; + case DNS_TYPE_MX: + cJSON_AddStringToObject(one_rr_object, "exchange", (const char *)(dns_rr->rdata.mx.exchange)); + cJSON_AddNumberToObject(one_rr_object, "preference", dns_rr->rdata.mx.preference); + break; + case DNS_TYPE_TXT: + cJSON_AddStringToObject(one_rr_object, "txt", (char *)(dns_rr->rdata.txt.txt)); + cJSON_AddNumberToObject(one_rr_object, "size", dns_rr->rdata.txt.size); + break; + case DNS_TYPE_RP: + cJSON_AddStringToObject(one_rr_object, "mailbox", (char *)(dns_rr->rdata.rp.mailbox)); + cJSON_AddStringToObject(one_rr_object, "txt_rr", (char *)(dns_rr->rdata.rp.txt_rr)); + break; + case DNS_TYPE_AAAA: + inet_ntop(AF_INET6, dns_rr->rdata.aaaa, ip_str, sizeof(ip_str)); + cJSON_AddStringToObject(one_rr_object, "aaaa", ip_str); + break; + case DNS_TYPE_OPT: + break; + case DNS_TYPE_DS: + dns_sec = 2; + cJSON_AddNumberToObject(one_rr_object, "key_tag", dns_rr->rdata.ds.key_tag); + cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.ds.algo); + cJSON_AddNumberToObject(one_rr_object, "digest_type", dns_rr->rdata.ds.digest_type); + cJSON_AddStringToObject(one_rr_object, "digest", (char *)(dns_rr->rdata.ds.digest)); + break; + case DNS_TYPE_RRSIG: + dns_sec = 2; + cJSON_AddNumberToObject(one_rr_object, "type_covered", dns_rr->rdata.rrsig.type_covered); + cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.rrsig.algo); + cJSON_AddNumberToObject(one_rr_object, "labels", dns_rr->rdata.rrsig.labels); + cJSON_AddNumberToObject(one_rr_object, "original_ttl", dns_rr->rdata.rrsig.original_ttl); + cJSON_AddNumberToObject(one_rr_object, "sig_expiration", dns_rr->rdata.rrsig.sig_expiration); + cJSON_AddNumberToObject(one_rr_object, "sig_inception", dns_rr->rdata.rrsig.sig_inception); + cJSON_AddNumberToObject(one_rr_object, "key_tag", dns_rr->rdata.rrsig.key_tag); + cJSON_AddStringToObject(one_rr_object, "signer_name", (const char *)(dns_rr->rdata.rrsig.signer_name)); + cJSON_AddStringToObject(one_rr_object, "signature", (char *)(dns_rr->rdata.rrsig.signature)); + break; + case DNS_TYPE_NSEC: + dns_sec = 2; + cJSON_AddStringToObject(one_rr_object, "next_domain", (const char *)(dns_rr->rdata.nsec.next_domain)); + cJSON_AddStringToObject(one_rr_object, "type_bit_maps", (char *)(dns_rr->rdata.nsec.type_bit_maps)); + break; + case DNS_TYPE_DNSKEY: + dns_sec = 2; + cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.dnskey.flags); + cJSON_AddNumberToObject(one_rr_object, "protocol", dns_rr->rdata.dnskey.protocol); + cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.dnskey.algo); + cJSON_AddStringToObject(one_rr_object, "public_key", (char *)(dns_rr->rdata.dnskey.public_key)); + break; + case DNS_TYPE_NSEC3: + dns_sec = 2; + cJSON_AddNumberToObject(one_rr_object, "hash_algo", dns_rr->rdata.nsec3.hash_algo); + cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.nsec3.flags); + cJSON_AddNumberToObject(one_rr_object, "iteration", dns_rr->rdata.nsec3.iteration); + cJSON_AddNumberToObject(one_rr_object, "salt_len", dns_rr->rdata.nsec3.salt_len); + cJSON_AddNumberToObject(one_rr_object, "hash_len", dns_rr->rdata.nsec3.hash_len); + cJSON_AddStringToObject(one_rr_object, "salt_value", (char *)(dns_rr->rdata.nsec3.salt_value)); + cJSON_AddStringToObject(one_rr_object, "next_hash_owner", (char *)(dns_rr->rdata.nsec3.next_hash_owner)); + cJSON_AddStringToObject(one_rr_object, "type_bit_maps", (char *)(dns_rr->rdata.nsec3.type_bit_maps)); + break; + case DNS_TYPE_NSEC3PARAM: + cJSON_AddNumberToObject(one_rr_object, "hash_algo", dns_rr->rdata.nsec3param.hash_algo); + cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.nsec3param.flags); + cJSON_AddNumberToObject(one_rr_object, "iteration", dns_rr->rdata.nsec3param.iteration); + cJSON_AddNumberToObject(one_rr_object, "salt_len", dns_rr->rdata.nsec3param.salt_len); + cJSON_AddStringToObject(one_rr_object, "salt_value", (char *)(dns_rr->rdata.nsec3param.salt_value)); + break; + case DNS_QTYPE_AXFR: + break; + case DNS_QTYPE_MAILB: + continue; + break; + case DNS_QTYPE_MAILA: + break; + case DNS_QTYPE_ANY: + break; + default: + break; + } + + cJSON_AddItemToArray(dns_rr_array, one_rr_object); + } + + cJSON_AddItemToObject(object, "rr", dns_rr_array); + + return 0; +} + int get_rr_content2buf(dns_rr_t *rr, int rr_count, char *rr_buf, int buflen, int *dns_sec) { int i = 0, j = 0; -- cgit v1.2.3 From 80c9d605975ec880ba4398a151ed6c85c6f84306 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Wed, 4 Dec 2019 16:35:01 +0800 Subject: 判断业务层返回值,做一次转换 支持资源记录转化为son格式 调整符号名导出 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/dns.cpp | 73 +++++++++++++++++++++++++++++++++++------------------- src/dns.h | 12 +++------ src/dns_global.map | 3 +++ 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/src/dns.cpp b/src/dns.cpp index 4b0888d..5b4dc15 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -24,13 +24,14 @@ #include #include #include + #include #include #include #include "dns.h" #include "dns_internal.h" -int DNS_PROTOCOL_VERSION_20191127; +int DNS_PROTOCOL_VERSION_20191204; unsigned long long dns_register_flag = 0; unsigned short dns_plugid = 0; static pthread_mutex_t dns_lock; @@ -87,10 +88,6 @@ int get_rr_str2json(cJSON *object, dns_info_t *dns_info, int *dns_sec) char ip_str[128]; dns_rr_t *dns_rr=NULL; cJSON *one_rr_object=NULL; - cJSON *dns_hdr_object=NULL; - cJSON *dns_flags_object=NULL; - cJSON *dns_question_array=NULL; - cJSON *one_question_object=NULL; cJSON *dns_rr_array=NULL; if(object==NULL || dns_info==NULL || dns_sec==NULL) @@ -99,9 +96,6 @@ int get_rr_str2json(cJSON *object, dns_info_t *dns_info, int *dns_sec) } dns_rr_array=cJSON_CreateArray(); - dns_hdr_object=cJSON_CreateObject(); - dns_flags_object=cJSON_CreateObject(); - dns_question_array=cJSON_CreateArray(); for(i = 0; i < dns_info->rr_count; i++) { @@ -209,14 +203,14 @@ int get_rr_str2json(cJSON *object, dns_info_t *dns_info, int *dns_sec) case DNS_TYPE_OPT: break; case DNS_TYPE_DS: - dns_sec = 2; + *dns_sec = 2; cJSON_AddNumberToObject(one_rr_object, "key_tag", dns_rr->rdata.ds.key_tag); cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.ds.algo); cJSON_AddNumberToObject(one_rr_object, "digest_type", dns_rr->rdata.ds.digest_type); cJSON_AddStringToObject(one_rr_object, "digest", (char *)(dns_rr->rdata.ds.digest)); break; case DNS_TYPE_RRSIG: - dns_sec = 2; + *dns_sec = 2; cJSON_AddNumberToObject(one_rr_object, "type_covered", dns_rr->rdata.rrsig.type_covered); cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.rrsig.algo); cJSON_AddNumberToObject(one_rr_object, "labels", dns_rr->rdata.rrsig.labels); @@ -228,19 +222,19 @@ int get_rr_str2json(cJSON *object, dns_info_t *dns_info, int *dns_sec) cJSON_AddStringToObject(one_rr_object, "signature", (char *)(dns_rr->rdata.rrsig.signature)); break; case DNS_TYPE_NSEC: - dns_sec = 2; + *dns_sec = 2; cJSON_AddStringToObject(one_rr_object, "next_domain", (const char *)(dns_rr->rdata.nsec.next_domain)); cJSON_AddStringToObject(one_rr_object, "type_bit_maps", (char *)(dns_rr->rdata.nsec.type_bit_maps)); break; case DNS_TYPE_DNSKEY: - dns_sec = 2; + *dns_sec = 2; cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.dnskey.flags); cJSON_AddNumberToObject(one_rr_object, "protocol", dns_rr->rdata.dnskey.protocol); cJSON_AddNumberToObject(one_rr_object, "algo", dns_rr->rdata.dnskey.algo); cJSON_AddStringToObject(one_rr_object, "public_key", (char *)(dns_rr->rdata.dnskey.public_key)); break; case DNS_TYPE_NSEC3: - dns_sec = 2; + *dns_sec = 2; cJSON_AddNumberToObject(one_rr_object, "hash_algo", dns_rr->rdata.nsec3.hash_algo); cJSON_AddNumberToObject(one_rr_object, "flags", dns_rr->rdata.nsec3.flags); cJSON_AddNumberToObject(one_rr_object, "iteration", dns_rr->rdata.nsec3.iteration); @@ -1236,6 +1230,7 @@ int get_rr_common_field(char *msg, char **ptr, dns_rr_t *rr, char *end) int callback_dns_business_plug(struct streaminfo *a_stream, void **pme, void *info, int prot_flag, int session_state, int thread_seq, void *a_packet) { + char state=APP_STATE_GIVEME; stSessionInfo sessionInfo; save_dns_business_info_t *apme = (save_dns_business_info_t *)*pme; @@ -1245,9 +1240,31 @@ int callback_dns_business_plug(struct streaminfo *a_stream, void **pme, void *in sessionInfo.session_state = session_state; sessionInfo.prot_flag = prot_flag; sessionInfo.app_info = (void *)info; - PROT_PROCESS(&sessionInfo, &apme->business_pme, thread_seq, a_stream, a_packet); + state=PROT_PROCESS(&sessionInfo, &apme->business_pme, thread_seq, a_stream, a_packet); - return 0; + if(state&PROT_STATE_DROPPKT) + { + state=APP_STATE_DROPPKT; + } + + if(state&PROT_STATE_DROPME) + { + if(state&APP_STATE_DROPPKT) + { + state|=APP_STATE_DROPME; + } + else + { + state=APP_STATE_DROPME; + } + } + + if(state&PROT_STATE_GIVEME) + { + state=APP_STATE_GIVEME; + } + + return state; } int get_dns_query_question(char *msg, char **ptr, dns_query_question_t *q, char *end) @@ -1637,9 +1654,9 @@ int parse_resource_record(struct streaminfo *a_stream, dns_info_t *dns_info, cha int parse_dns_protocol(struct streaminfo *a_stream, unsigned char opstate, char *payload, int payload_len, void **pme, int thread_seq, void *a_packet) { - int i = 0; - int session_state = SESSION_STATE_PENDING; - int ret = APP_STATE_GIVEME; + int i=0; + int session_state=SESSION_STATE_PENDING; + int ret=APP_STATE_GIVEME; char *cur_pos = NULL; dns_info_t dns_info; unsigned long long register_flag = dns_register_flag; @@ -1705,7 +1722,11 @@ int parse_dns_protocol(struct streaminfo *a_stream, unsigned char opstate, char return APP_STATE_DROPME; } - callback_dns_business_plug(a_stream, pme, (void *)&dns_info, DNS_ALL, session_state, thread_seq, a_packet); + ret=callback_dns_business_plug(a_stream, pme, (void *)&dns_info, DNS_ALL, session_state, thread_seq, a_packet); + if(ret&APP_STATE_DROPME || ret&APP_STATE_DROPPKT) + { + return ret; + } } else if((register_flag&DNS_REQ_ALL) && (0 == dns_info.hdr_info.qr)) /* process query packet */ { @@ -1786,6 +1807,7 @@ int parse_dns_protocol(struct streaminfo *a_stream, unsigned char opstate, char char DNS_UDP_ENTRY(struct streaminfo *a_udp, void **pme, int thread_seq, void *a_packet) { + char state=APP_STATE_GIVEME; int payload_len = 0; char *payload = NULL; struct udpdetail *udp_detail = NULL; @@ -1825,16 +1847,16 @@ char DNS_UDP_ENTRY(struct streaminfo *a_udp, void **pme, int thread_seq, void *a break; } - parse_dns_protocol(a_udp, a_udp->opstate, payload, payload_len, pme, thread_seq, a_packet); + state=parse_dns_protocol(a_udp, a_udp->opstate, payload, payload_len, pme, thread_seq, a_packet); break; case OP_STATE_CLOSE: - callback_dns_business_plug(a_udp, pme, NULL, DNS_ALL, SESSION_STATE_CLOSE, thread_seq, a_packet); + state=callback_dns_business_plug(a_udp, pme, NULL, DNS_ALL, SESSION_STATE_CLOSE, thread_seq, a_packet); dictator_free(thread_seq, *pme); *pme = NULL; break; } - return APP_STATE_GIVEME; + return state; } @@ -1842,6 +1864,7 @@ char DNS_TCP_ENTRY(struct streaminfo *a_tcp, void **pme, int thread_seq, void *a { int payload_len = 0; char *payload = NULL; + char state=APP_STATE_GIVEME; struct tcpdetail* tcp_detail = (struct tcpdetail*)a_tcp->pdetail; save_dns_business_info_t *dns_pme=(save_dns_business_info_t*)*pme; @@ -1913,16 +1936,16 @@ char DNS_TCP_ENTRY(struct streaminfo *a_tcp, void **pme, int thread_seq, void *a return APP_STATE_GIVEME; } - parse_dns_protocol(a_tcp, a_tcp->opstate, payload, payload_len, pme, thread_seq, a_packet); + state=parse_dns_protocol(a_tcp, a_tcp->opstate, payload, payload_len, pme, thread_seq, a_packet); break; case OP_STATE_CLOSE: - callback_dns_business_plug(a_tcp, pme, NULL, DNS_UNKOWN, SESSION_STATE_CLOSE, thread_seq, a_packet); + state=callback_dns_business_plug(a_tcp, pme, NULL, DNS_UNKOWN, SESSION_STATE_CLOSE, thread_seq, a_packet); dictator_free(thread_seq, *pme); *pme = NULL; break; } - return APP_STATE_GIVEME; + return state; } diff --git a/src/dns.h b/src/dns.h index 2fc1930..ed7512e 100644 --- a/src/dns.h +++ b/src/dns.h @@ -1,6 +1,8 @@ #ifndef DNS_ANALYSE_H #define DNS_ANALYSE_H +#include + #ifndef u_char #define u_char unsigned char #endif @@ -30,15 +32,6 @@ #define DNS_HINFO_MAX_OS 40 #define DNS_MAX_NAME 255 -/* support reponse cfg type */ -#define DNS_CFG_TYPE_CNAME 0 -#define DNS_CFG_TYPE_MX 1 -#define DNS_CFG_TYPE_AUTH 2 -#define DNS_CFG_TYPE_ADDI 3 -#define DNS_CFG_TYPE_A 5 -#define DNS_CFG_TYPE_NS 6 -#define DNS_CFG_TYPE_AAAA 7 - /* RR type */ #define DNS_TYPE_A 1 #define DNS_TYPE_NS 2 @@ -344,6 +337,7 @@ extern "C" * * */ +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); diff --git a/src/dns_global.map b/src/dns_global.map index 8288e5b..35a5ff5 100644 --- a/src/dns_global.map +++ b/src/dns_global.map @@ -7,5 +7,8 @@ global: PROT_FUNSTAT; FLAG_CHANGE; GET_PLUGID; + get_rr_content2buf; + get_rr_str2json; + dns_save_raw_pkt; local:*; }; -- cgit v1.2.3 From d65b4f2d02bb4c6789f6788f1ae2f9126968d805 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Tue, 10 Dec 2019 17:32:13 +0800 Subject: dns test适应最新头文件 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/src/dns_test.c | 227 ++++++++++++++++++++++++++-------------------------- 1 file changed, 114 insertions(+), 113 deletions(-) diff --git a/test/src/dns_test.c b/test/src/dns_test.c index ff054c3..aaabfd3 100644 --- a/test/src/dns_test.c +++ b/test/src/dns_test.c @@ -83,20 +83,20 @@ int rr_print(dns_info_t *dns_info, struct streaminfo *a_udp, int thread_seq, voi cJSON_AddItemToObject(dns_info_object, "hdr", dns_hdr_object); cJSON_AddItemToObject(dns_info_object, "flags", dns_flags_object); cJSON_AddItemToObject(dns_info_object,"question", dns_question_array); - for(i = 0; i < dns_info->hdr_info.qdcount && (&dns_info->query_question[i])!=NULL; i++) - { - used_len = snprintf(question, sizeof(question), "question: \n", - dns_info->query_question[i].qtype, - dns_info->query_question[i].qclass, - dns_info->query_question[i].qname); - - cJSON *dns_question_object=cJSON_CreateObject(); - cJSON_AddItemToArray(dns_question_array, dns_question_object); - cJSON_AddNumberToObject(dns_question_object, "qtype", dns_info->query_question[i].qtype); - cJSON_AddNumberToObject(dns_question_object, "qclass", dns_info->query_question[i].qclass); - cJSON_AddStringToObject(dns_question_object, "qname", (const char *)dns_info->query_question[i].qname); - } + + used_len = snprintf(question, sizeof(question), "question: \n", + dns_info->query_question.qtype, + dns_info->query_question.qclass, + dns_info->query_question.qname); + + cJSON *dns_question_object=cJSON_CreateObject(); + cJSON_AddItemToArray(dns_question_array, dns_question_object); + + cJSON_AddNumberToObject(dns_question_object, "qtype", dns_info->query_question.qtype); + cJSON_AddNumberToObject(dns_question_object, "qclass", dns_info->query_question.qclass); + cJSON_AddStringToObject(dns_question_object, "qname", (const char *)dns_info->query_question.qname); + fwrite(question, used_len, 1, fp); @@ -178,20 +178,21 @@ int rr_print(dns_info_t *dns_info, struct streaminfo *a_udp, int thread_seq, voi case DNS_TYPE_SOA: used_len += snprintf(buf+used_len, buflen-used_len, "[SOA mname: %s, rname: %s, serial: %u, refresh: %u, retry: %u, expire: %u, minimum: %u]\n", - dns_rr->rdata.soa->mname, - dns_rr->rdata.soa->rname, - dns_rr->rdata.soa->serial, - dns_rr->rdata.soa->refresh, - dns_rr->rdata.soa->retry, - dns_rr->rdata.soa->expire, - dns_rr->rdata.soa->minimum); - cJSON_AddStringToObject(dns_rr_object, "mname", (const char *)(dns_rr->rdata.soa->mname)); - cJSON_AddStringToObject(dns_rr_object, "rname", (const char *)(dns_rr->rdata.soa->rname)); - cJSON_AddNumberToObject(dns_rr_object, "serial", dns_rr->rdata.soa->serial); - cJSON_AddNumberToObject(dns_rr_object, "refresh", dns_rr->rdata.soa->refresh); - cJSON_AddNumberToObject(dns_rr_object, "retry", dns_rr->rdata.soa->retry); - cJSON_AddNumberToObject(dns_rr_object, "cname", dns_rr->rdata.soa->expire); - cJSON_AddNumberToObject(dns_rr_object, "minimum", dns_rr->rdata.soa->minimum); + dns_rr->rdata.soa.mname, + dns_rr->rdata.soa.rname, + dns_rr->rdata.soa.serial, + dns_rr->rdata.soa.refresh, + dns_rr->rdata.soa.retry, + dns_rr->rdata.soa.expire, + dns_rr->rdata.soa.minimum); + + cJSON_AddStringToObject(dns_rr_object, "mname", (const char *)(dns_rr->rdata.soa.mname)); + cJSON_AddStringToObject(dns_rr_object, "rname", (const char *)(dns_rr->rdata.soa.rname)); + cJSON_AddNumberToObject(dns_rr_object, "serial", dns_rr->rdata.soa.serial); + cJSON_AddNumberToObject(dns_rr_object, "refresh", dns_rr->rdata.soa.refresh); + cJSON_AddNumberToObject(dns_rr_object, "retry", dns_rr->rdata.soa.retry); + cJSON_AddNumberToObject(dns_rr_object, "cname", dns_rr->rdata.soa.expire); + cJSON_AddNumberToObject(dns_rr_object, "minimum", dns_rr->rdata.soa.minimum); break; case DNS_TYPE_MB: used_len += snprintf(buf+used_len, buflen-used_len, "[MB: %s]\n", dns_rr->rdata.mb); @@ -207,19 +208,19 @@ int rr_print(dns_info_t *dns_info, struct streaminfo *a_udp, int thread_seq, voi break; case DNS_TYPE_NULL: used_len += snprintf(buf+used_len, buflen-used_len, "[null size: %u, null: %s]\n", - dns_rr->rdata.null->size, dns_rr->rdata.null->null); - cJSON_AddNumberToObject(dns_rr_object, "size", dns_rr->rdata.null->size); - cJSON_AddStringToObject(dns_rr_object, "null", (const char *)(dns_rr->rdata.null->null)); + dns_rr->rdata.null.size, dns_rr->rdata.null.null); + cJSON_AddNumberToObject(dns_rr_object, "size", dns_rr->rdata.null.size); + cJSON_AddStringToObject(dns_rr_object, "null", (const char *)(dns_rr->rdata.null.null)); break; case DNS_TYPE_WKS: - inet_ntop(AF_INET, &(dns_rr->rdata.wks->addr), ip_str, sizeof(ip_str)); + inet_ntop(AF_INET, &(dns_rr->rdata.wks.addr), ip_str, sizeof(ip_str)); used_len += snprintf(buf+used_len, buflen-used_len, "[WKS addr: %s, protocol: %u, bitmap: %s, size: %u]\n", - ip_str, dns_rr->rdata.wks->protocol, dns_rr->rdata.wks->bitmap, dns_rr->rdata.wks->size); + ip_str, dns_rr->rdata.wks.protocol, dns_rr->rdata.wks.bitmap, dns_rr->rdata.wks.size); cJSON_AddStringToObject(dns_rr_object, "addr", ip_str); - cJSON_AddNumberToObject(dns_rr_object, "protocol", dns_rr->rdata.wks->protocol); - cJSON_AddStringToObject(dns_rr_object, "bitmap", (const char *)(dns_rr->rdata.wks->bitmap)); - cJSON_AddNumberToObject(dns_rr_object, "size", dns_rr->rdata.wks->size); + cJSON_AddNumberToObject(dns_rr_object, "protocol", dns_rr->rdata.wks.protocol); + cJSON_AddStringToObject(dns_rr_object, "bitmap", (const char *)(dns_rr->rdata.wks.bitmap)); + cJSON_AddNumberToObject(dns_rr_object, "size", dns_rr->rdata.wks.size); break; case DNS_TYPE_PTR: used_len += snprintf(buf+used_len, buflen-used_len, "[PTR: %s]\n", dns_rr->rdata.ptr); @@ -227,38 +228,38 @@ int rr_print(dns_info_t *dns_info, struct streaminfo *a_udp, int thread_seq, voi break; case DNS_TYPE_HINFO: used_len += snprintf(buf+used_len, buflen-used_len, "[HINFO cpu: %s, os: %s]\n", - dns_rr->rdata.hinfo->cpu, dns_rr->rdata.hinfo->os); + dns_rr->rdata.hinfo.cpu, dns_rr->rdata.hinfo.os); - cJSON_AddStringToObject(dns_rr_object, "cpu", (const char *)(dns_rr->rdata.hinfo->cpu)); - cJSON_AddStringToObject(dns_rr_object, "os", (const char *)(dns_rr->rdata.hinfo->os)); + cJSON_AddStringToObject(dns_rr_object, "cpu", (const char *)(dns_rr->rdata.hinfo.cpu)); + cJSON_AddStringToObject(dns_rr_object, "os", (const char *)(dns_rr->rdata.hinfo.os)); break; case DNS_TYPE_MINFO: used_len += snprintf(buf+used_len, buflen-used_len, "[MINFO rmailbx: %s, emailbx: %s]\n", - dns_rr->rdata.minfo->rmailbx, dns_rr->rdata.minfo->emailbx); + dns_rr->rdata.minfo.rmailbx, dns_rr->rdata.minfo.emailbx); - cJSON_AddStringToObject(dns_rr_object, "rmailbx", (const char *)(dns_rr->rdata.minfo->rmailbx)); - cJSON_AddStringToObject(dns_rr_object, "emailbx", (const char *)(dns_rr->rdata.minfo->emailbx)); + cJSON_AddStringToObject(dns_rr_object, "rmailbx", (const char *)(dns_rr->rdata.minfo.rmailbx)); + cJSON_AddStringToObject(dns_rr_object, "emailbx", (const char *)(dns_rr->rdata.minfo.emailbx)); break; case DNS_TYPE_MX: used_len += snprintf(buf+used_len, buflen-used_len, "[MX preference: %u, exchange: %s]\n", - dns_rr->rdata.mx->preference, dns_rr->rdata.mx->exchange); + dns_rr->rdata.mx.preference, dns_rr->rdata.mx.exchange); - cJSON_AddStringToObject(dns_rr_object, "exchange", (const char *)(dns_rr->rdata.mx->exchange)); - cJSON_AddNumberToObject(dns_rr_object, "preference", dns_rr->rdata.mx->preference); + cJSON_AddStringToObject(dns_rr_object, "exchange", (const char *)(dns_rr->rdata.mx.exchange)); + cJSON_AddNumberToObject(dns_rr_object, "preference", dns_rr->rdata.mx.preference); break; case DNS_TYPE_TXT: used_len += snprintf(buf+used_len, buflen-used_len, "[TXT size: %u, txt: %s]\n", - dns_rr->rdata.txt->size, dns_rr->rdata.txt->txt); + dns_rr->rdata.txt.size, dns_rr->rdata.txt.txt); - cJSON_AddStringToObject(dns_rr_object, "txt", (const char *)(dns_rr->rdata.txt->txt)); - cJSON_AddNumberToObject(dns_rr_object, "size", dns_rr->rdata.txt->size); + cJSON_AddStringToObject(dns_rr_object, "txt", (const char *)(dns_rr->rdata.txt.txt)); + cJSON_AddNumberToObject(dns_rr_object, "size", dns_rr->rdata.txt.size); break; case DNS_TYPE_RP: used_len += snprintf(buf+used_len, buflen-used_len, "[mailbox: %s, txt_rr: %s]\n", - dns_rr->rdata.rp->mailbox, dns_rr->rdata.rp->txt_rr); + dns_rr->rdata.rp.mailbox, dns_rr->rdata.rp.txt_rr); - cJSON_AddStringToObject(dns_rr_object, "mailbox", (const char *)(dns_rr->rdata.rp->mailbox)); - cJSON_AddStringToObject(dns_rr_object, "txt_rr", (const char *)(dns_rr->rdata.rp->txt_rr)); + cJSON_AddStringToObject(dns_rr_object, "mailbox", (const char *)(dns_rr->rdata.rp.mailbox)); + cJSON_AddStringToObject(dns_rr_object, "txt_rr", (const char *)(dns_rr->rdata.rp.txt_rr)); break; case DNS_TYPE_AAAA: inet_ntop(AF_INET6, dns_rr->rdata.aaaa, ip_str, sizeof(ip_str)); @@ -270,72 +271,72 @@ int rr_print(dns_info_t *dns_info, struct streaminfo *a_udp, int thread_seq, voi case DNS_TYPE_DS: *dns_sec = 2; len = 0; - assert(dns_rr->rdata.ds->digest_len*2rdata.ds->digest_len); j++) + assert(dns_rr->rdata.ds.digest_len*2rdata.ds.digest_len); j++) { - len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.ds->digest[j]); + len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.ds.digest[j]); } used_len += snprintf(buf+used_len, buflen-used_len, "[DS key_tag: %u, algo: %u, digest_type: %u, digest: %s]\n", - dns_rr->rdata.ds->key_tag, dns_rr->rdata.ds->algo, - dns_rr->rdata.ds->digest_type, tmp_buf); + dns_rr->rdata.ds.key_tag, dns_rr->rdata.ds.algo, + dns_rr->rdata.ds.digest_type, tmp_buf); - cJSON_AddNumberToObject(dns_rr_object, "key_tag", dns_rr->rdata.ds->key_tag); - cJSON_AddNumberToObject(dns_rr_object, "algo", dns_rr->rdata.ds->algo); - cJSON_AddNumberToObject(dns_rr_object, "digest_type", dns_rr->rdata.ds->digest_type); + cJSON_AddNumberToObject(dns_rr_object, "key_tag", dns_rr->rdata.ds.key_tag); + cJSON_AddNumberToObject(dns_rr_object, "algo", dns_rr->rdata.ds.algo); + cJSON_AddNumberToObject(dns_rr_object, "digest_type", dns_rr->rdata.ds.digest_type); cJSON_AddStringToObject(dns_rr_object, "digest", tmp_buf); break; case DNS_TYPE_RRSIG: *dns_sec = 2; len = 0; - assert(dns_rr->rdata.rrsig->signature_len*2rdata.rrsig->signature_len); j++) + assert(dns_rr->rdata.rrsig.signature_len*2rdata.rrsig.signature_len); j++) { - len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.rrsig->signature[j]); + len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.rrsig.signature[j]); } used_len += snprintf(buf+used_len, buflen-used_len, "[RRSIG type_covered: %u, algo: %u, labels: %u, original_ttl: %u, sig_expiration: %u, sig_inception: %u, key_tag: %u, signer_name: %s, signature: %s]\n", - dns_rr->rdata.rrsig->type_covered, dns_rr->rdata.rrsig->algo, - dns_rr->rdata.rrsig->labels, dns_rr->rdata.rrsig->original_ttl, - dns_rr->rdata.rrsig->sig_expiration, dns_rr->rdata.rrsig->sig_inception, - dns_rr->rdata.rrsig->key_tag, dns_rr->rdata.rrsig->signer_name, tmp_buf); - - cJSON_AddNumberToObject(dns_rr_object, "type_covered", dns_rr->rdata.rrsig->type_covered); - cJSON_AddNumberToObject(dns_rr_object, "algo", dns_rr->rdata.rrsig->algo); - cJSON_AddNumberToObject(dns_rr_object, "labels", dns_rr->rdata.rrsig->labels); - cJSON_AddNumberToObject(dns_rr_object, "original_ttl", dns_rr->rdata.rrsig->original_ttl); - cJSON_AddNumberToObject(dns_rr_object, "sig_expiration", dns_rr->rdata.rrsig->sig_expiration); - cJSON_AddNumberToObject(dns_rr_object, "sig_inception", dns_rr->rdata.rrsig->sig_inception); - cJSON_AddNumberToObject(dns_rr_object, "key_tag", dns_rr->rdata.rrsig->key_tag); - cJSON_AddStringToObject(dns_rr_object, "signer_name", (const char *)(dns_rr->rdata.rrsig->signer_name)); + dns_rr->rdata.rrsig.type_covered, dns_rr->rdata.rrsig.algo, + dns_rr->rdata.rrsig.labels, dns_rr->rdata.rrsig.original_ttl, + dns_rr->rdata.rrsig.sig_expiration, dns_rr->rdata.rrsig.sig_inception, + dns_rr->rdata.rrsig.key_tag, dns_rr->rdata.rrsig.signer_name, tmp_buf); + + cJSON_AddNumberToObject(dns_rr_object, "type_covered", dns_rr->rdata.rrsig.type_covered); + cJSON_AddNumberToObject(dns_rr_object, "algo", dns_rr->rdata.rrsig.algo); + cJSON_AddNumberToObject(dns_rr_object, "labels", dns_rr->rdata.rrsig.labels); + cJSON_AddNumberToObject(dns_rr_object, "original_ttl", dns_rr->rdata.rrsig.original_ttl); + cJSON_AddNumberToObject(dns_rr_object, "sig_expiration", dns_rr->rdata.rrsig.sig_expiration); + cJSON_AddNumberToObject(dns_rr_object, "sig_inception", dns_rr->rdata.rrsig.sig_inception); + cJSON_AddNumberToObject(dns_rr_object, "key_tag", dns_rr->rdata.rrsig.key_tag); + cJSON_AddStringToObject(dns_rr_object, "signer_name", (const char *)(dns_rr->rdata.rrsig.signer_name)); cJSON_AddStringToObject(dns_rr_object, "signature", tmp_buf); break; case DNS_TYPE_NSEC: *dns_sec = 2; len = 0; - for(j = 0; j < (int)(dns_rr->rdata.nsec->maps_len); j++) + for(j = 0; j < (int)(dns_rr->rdata.nsec.maps_len); j++) { - len += snprintf(maps+len, sizeof(maps)-len, "%02x", dns_rr->rdata.nsec->type_bit_maps[j]); + len += snprintf(maps+len, sizeof(maps)-len, "%02x", dns_rr->rdata.nsec.type_bit_maps[j]); } - used_len += snprintf(buf+used_len, buflen-used_len, "[NSEC next_domain: %s, type_bit_maps: %s]\n", dns_rr->rdata.nsec->next_domain, maps); + used_len += snprintf(buf+used_len, buflen-used_len, "[NSEC next_domain: %s, type_bit_maps: %s]\n", dns_rr->rdata.nsec.next_domain, maps); - cJSON_AddStringToObject(dns_rr_object, "next_domain", (const char *)(dns_rr->rdata.nsec->next_domain)); + cJSON_AddStringToObject(dns_rr_object, "next_domain", (const char *)(dns_rr->rdata.nsec.next_domain)); cJSON_AddStringToObject(dns_rr_object, "type_bit_maps", maps); break; case DNS_TYPE_DNSKEY: *dns_sec = 2; len = 0; - assert(dns_rr->rdata.dnskey->public_key_len*2rdata.dnskey->public_key_len); j++) + assert(dns_rr->rdata.dnskey.public_key_len*2rdata.dnskey.public_key_len); j++) { - len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.dnskey->public_key[j]); + len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.dnskey.public_key[j]); } used_len += snprintf(buf+used_len, buflen-used_len, "[DNSKEY flags: %u, protocol: %u, algo: %u, public_key: %s]\n", - dns_rr->rdata.dnskey->flags, dns_rr->rdata.dnskey->protocol, dns_rr->rdata.dnskey->algo, tmp_buf); + dns_rr->rdata.dnskey.flags, dns_rr->rdata.dnskey.protocol, dns_rr->rdata.dnskey.algo, tmp_buf); - cJSON_AddNumberToObject(dns_rr_object, "flags", dns_rr->rdata.dnskey->flags); - cJSON_AddNumberToObject(dns_rr_object, "protocol", dns_rr->rdata.dnskey->protocol); - cJSON_AddNumberToObject(dns_rr_object, "algo", dns_rr->rdata.dnskey->algo); + cJSON_AddNumberToObject(dns_rr_object, "flags", dns_rr->rdata.dnskey.flags); + cJSON_AddNumberToObject(dns_rr_object, "protocol", dns_rr->rdata.dnskey.protocol); + cJSON_AddNumberToObject(dns_rr_object, "algo", dns_rr->rdata.dnskey.algo); cJSON_AddStringToObject(dns_rr_object, "public_key", tmp_buf); break; case DNS_TYPE_NSEC3: @@ -343,55 +344,55 @@ int rr_print(dns_info_t *dns_info, struct streaminfo *a_udp, int thread_seq, voi memset(tmp_buf, 0, sizeof(tmp_buf)); memset(maps, 0, sizeof(maps)); len = 0; - assert(dns_rr->rdata.nsec3->hash_len*2rdata.nsec3->hash_len); j++) + assert(dns_rr->rdata.nsec3.hash_len*2rdata.nsec3.hash_len); j++) { - len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.nsec3->next_hash_owner[j]); + len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.nsec3.next_hash_owner[j]); } len = 0; - for(j = 0; j < (int)(dns_rr->rdata.nsec3->maps_len); j++) + for(j = 0; j < (int)(dns_rr->rdata.nsec3.maps_len); j++) { - len += snprintf(maps+len, sizeof(maps)-len, "%02x", dns_rr->rdata.nsec3->type_bit_maps[j]); + len += snprintf(maps+len, sizeof(maps)-len, "%02x", dns_rr->rdata.nsec3.type_bit_maps[j]); } len = 0; - for(j = 0; j < (int)(dns_rr->rdata.nsec3->salt_len); j++) + for(j = 0; j < (int)(dns_rr->rdata.nsec3.salt_len); j++) { - len += snprintf(salt_value+len, sizeof(salt_value)-len, "%02x", dns_rr->rdata.nsec3->salt_value[j]); + len += snprintf(salt_value+len, sizeof(salt_value)-len, "%02x", dns_rr->rdata.nsec3.salt_value[j]); } used_len += snprintf(buf+used_len, buflen-used_len, "[NSEC3 hash_algo: %u, flags: %u, iteration: %u, salt_len: %u, hash_len: %u, salt_value: %s, next_hash_owner: %s, type_bit_maps: %s]\n", - dns_rr->rdata.nsec3->hash_algo, dns_rr->rdata.nsec3->flags, - dns_rr->rdata.nsec3->iteration, dns_rr->rdata.nsec3->salt_len, - dns_rr->rdata.nsec3->hash_len, salt_value, tmp_buf, maps); - - cJSON_AddNumberToObject(dns_rr_object, "hash_algo", dns_rr->rdata.nsec3->hash_algo); - cJSON_AddNumberToObject(dns_rr_object, "flags", dns_rr->rdata.nsec3->flags); - cJSON_AddNumberToObject(dns_rr_object, "iteration", dns_rr->rdata.nsec3->iteration); - cJSON_AddNumberToObject(dns_rr_object, "salt_len", dns_rr->rdata.nsec3->salt_len); - cJSON_AddNumberToObject(dns_rr_object, "hash_len", dns_rr->rdata.nsec3->hash_len); + dns_rr->rdata.nsec3.hash_algo, dns_rr->rdata.nsec3.flags, + dns_rr->rdata.nsec3.iteration, dns_rr->rdata.nsec3.salt_len, + dns_rr->rdata.nsec3.hash_len, salt_value, tmp_buf, maps); + + cJSON_AddNumberToObject(dns_rr_object, "hash_algo", dns_rr->rdata.nsec3.hash_algo); + cJSON_AddNumberToObject(dns_rr_object, "flags", dns_rr->rdata.nsec3.flags); + cJSON_AddNumberToObject(dns_rr_object, "iteration", dns_rr->rdata.nsec3.iteration); + cJSON_AddNumberToObject(dns_rr_object, "salt_len", dns_rr->rdata.nsec3.salt_len); + cJSON_AddNumberToObject(dns_rr_object, "hash_len", dns_rr->rdata.nsec3.hash_len); cJSON_AddStringToObject(dns_rr_object, "salt_value", salt_value); cJSON_AddStringToObject(dns_rr_object, "next_hash_owner", tmp_buf); cJSON_AddStringToObject(dns_rr_object, "type_bit_maps", maps); break; case DNS_TYPE_NSEC3PARAM: len = 0; - assert(dns_rr->rdata.nsec3param->salt_len*2rdata.nsec3param->salt_len); j++) + assert(dns_rr->rdata.nsec3param.salt_len*2rdata.nsec3param.salt_len); j++) { - len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.nsec3param->salt_value[j]); + len += snprintf(tmp_buf+len, sizeof(tmp_buf)-len, "%02x", dns_rr->rdata.nsec3param.salt_value[j]); } used_len += snprintf(buf+used_len, buflen-used_len, "[NSEC3PARAM hash_algo: %u, flags: %u, iteration: %u, salt_len: %u, salt_value: %s]\n", - dns_rr->rdata.nsec3param->hash_algo, dns_rr->rdata.nsec3param->flags, - dns_rr->rdata.nsec3param->iteration, dns_rr->rdata.nsec3param->salt_len, + dns_rr->rdata.nsec3param.hash_algo, dns_rr->rdata.nsec3param.flags, + dns_rr->rdata.nsec3param.iteration, dns_rr->rdata.nsec3param.salt_len, tmp_buf); - cJSON_AddNumberToObject(dns_rr_object, "hash_algo", dns_rr->rdata.nsec3param->hash_algo); - cJSON_AddNumberToObject(dns_rr_object, "flags", dns_rr->rdata.nsec3param->flags); - cJSON_AddNumberToObject(dns_rr_object, "iteration", dns_rr->rdata.nsec3param->iteration); - cJSON_AddNumberToObject(dns_rr_object, "salt_len", dns_rr->rdata.nsec3param->salt_len); + cJSON_AddNumberToObject(dns_rr_object, "hash_algo", dns_rr->rdata.nsec3param.hash_algo); + cJSON_AddNumberToObject(dns_rr_object, "flags", dns_rr->rdata.nsec3param.flags); + cJSON_AddNumberToObject(dns_rr_object, "iteration", dns_rr->rdata.nsec3param.iteration); + cJSON_AddNumberToObject(dns_rr_object, "salt_len", dns_rr->rdata.nsec3param.salt_len); cJSON_AddStringToObject(dns_rr_object, "salt_value", tmp_buf); break; case DNS_TYPE_UNKNOWN: @@ -469,9 +470,9 @@ char dns_build_cheat_pkt_entry (stSessionInfo *session_info, void **pme, int th memset(payload, 0, payload_len); dns_hdr = (dns_hdr_t *)payload; - if(dns_info!= NULL) + if(dns_info!= NULL && strlen(dns_info->query_question.qname)>0) { - switch(dns_info->query_question->qtype) + switch(dns_info->query_question.qtype) { case DNS_TYPE_A: cheat_opt.res_type = DNS_TYPE_A; @@ -492,7 +493,7 @@ char dns_build_cheat_pkt_entry (stSessionInfo *session_info, void **pme, int th dns_hdr->qdcount = 1; break; } - payload_len = build_cheat_pkt(payload, payload_len, dns_info->query_question, &cheat_opt, cheat_opt_num); + payload_len = build_cheat_pkt(payload, payload_len, &dns_info->query_question, &cheat_opt, cheat_opt_num); senddir = (a_udp->routedir)^1; MESA_inject_pkt(a_udp, (const char *)payload, payload_len, (const char *)a_packet, senddir); } -- cgit v1.2.3 From 5feb1c790d46ef09230dd0cbe88a9f8e0b80fc9d Mon Sep 17 00:00:00 2001 From: liuxueli Date: Tue, 24 Dec 2019 14:39:28 +0800 Subject: 修复对上层业务返回值判断逻辑错误,在串联环境下上层业务返回PROT_STATE_DROPPKT|PORT_STATE_DROPME时,解析层仅返回APP_STATE_DROPPKT,已修复 使用git自动打版本号 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmake/Version.cmake | 3 +-- src/dns.cpp | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 088b05a..b7d6110 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -1,4 +1,3 @@ - # Using autorevision.sh to generate version information set(__SOURCE_AUTORESIVISION ${CMAKE_SOURCE_DIR}/autorevision.sh) @@ -40,5 +39,5 @@ message(STATUS "Version: ${VERSION}-${VERSION_BUILD}") set(GIT_VERSION "${VERSION}-${CMAKE_BUILD_TYPE}-${VERSION_BUILD}-${VCS_BRANCH}-${VCS_TAG}-${VCS_DATE}") -string(REGEX REPLACE "[-:+]" "_" GIT_VERSION ${GIT_VERSION}) +string(REGEX REPLACE "[-:+/\\.]" "_" GIT_VERSION ${GIT_VERSION}) add_definitions(-DGIT_VERSION=${GIT_VERSION}) diff --git a/src/dns.cpp b/src/dns.cpp index 5b4dc15..ac1eea7 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -31,7 +31,28 @@ #include "dns.h" #include "dns_internal.h" -int DNS_PROTOCOL_VERSION_20191204; +#ifdef __cplusplus +extern "C" +{ +#endif + +#define GIT_VERSION_CATTER(v) __attribute__((__used__)) const char * GIT_VERSION_##v = NULL +#define GIT_VERSION_EXPEND(v) GIT_VERSION_CATTER(v) + +/* VERSION TAG */ +#ifdef GIT_VERSION +GIT_VERSION_EXPEND(GIT_VERSION); +#else +static __attribute__((__used__)) const char * GIT_VERSION_UNKNOWN = NULL; +#endif +#undef GIT_VERSION_CATTER +#undef GIT_VERSION_EXPEND + +#ifdef __cplusplus +} +#endif + +int DNS_PROTOCOL_VERSION_20191224; unsigned long long dns_register_flag = 0; unsigned short dns_plugid = 0; static pthread_mutex_t dns_lock; @@ -1230,7 +1251,8 @@ int get_rr_common_field(char *msg, char **ptr, dns_rr_t *rr, char *end) int callback_dns_business_plug(struct streaminfo *a_stream, void **pme, void *info, int prot_flag, int session_state, int thread_seq, void *a_packet) { - char state=APP_STATE_GIVEME; + char state=PROT_STATE_GIVEME; + char app_state=APP_STATE_GIVEME; stSessionInfo sessionInfo; save_dns_business_info_t *apme = (save_dns_business_info_t *)*pme; @@ -1244,27 +1266,27 @@ int callback_dns_business_plug(struct streaminfo *a_stream, void **pme, void *in if(state&PROT_STATE_DROPPKT) { - state=APP_STATE_DROPPKT; + app_state=APP_STATE_DROPPKT; } if(state&PROT_STATE_DROPME) { - if(state&APP_STATE_DROPPKT) + if(app_state&APP_STATE_DROPPKT) { - state|=APP_STATE_DROPME; + app_state|=APP_STATE_DROPME; } else { - state=APP_STATE_DROPME; + app_state=APP_STATE_DROPME; } } if(state&PROT_STATE_GIVEME) { - state=APP_STATE_GIVEME; + app_state=APP_STATE_GIVEME; } - return state; + return app_state; } int get_dns_query_question(char *msg, char **ptr, dns_query_question_t *q, char *end) -- cgit v1.2.3 From 6926aca89a1187567bcec41df4e7be7715315114 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Thu, 30 Apr 2020 10:38:32 +0800 Subject: 支持rpm包上传yum源(https://repo.geedge.net/pulp/content/7/x86_64/stable/platform/) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 158 +++++++++++++++++++++++++--------------------- CMakeLists.txt | 12 ++-- ci/get-nprocessors.sh | 48 ++++++++++++++ ci/perpare_pulp3_netrc.sh | 3 + ci/travis.sh | 64 +++++++++++++++++++ cmake/Package.cmake | 55 ++++++++++------ cmake/Version.cmake | 12 +++- 7 files changed, 254 insertions(+), 98 deletions(-) create mode 100644 ci/get-nprocessors.sh create mode 100644 ci/perpare_pulp3_netrc.sh create mode 100644 ci/travis.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 08e1ac9..be8c2f2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,92 +1,104 @@ -image: "docker:stable" - -services: - - docker:dind - +image: "git.mesalab.cn:7443/mesa_platform/build-env:master" variables: GIT_STRATEGY: "clone" - DOCKER_HOST: tcp://docker:2375 - DOCKER_DRIVER: overlay2 - IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG + BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/ + INSTALL_PREFIX: "/opt/MESA/lib/" + INSTALL_DEPENDENCY_LIBRARY: libMESA_handle_logger-devel libMESA_htable-devel libMESA_field_stat2-devel sapp-devel framework_env libMESA_prof_load-devel stages: - - build - - package - - release +- build -.build_before_script: +.build_by_travis: before_script: - - mkdir -p /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_NAMESPACE/ - - ln -s $CI_PROJECT_DIR /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_PATH - - cd /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX/$CI_PROJECT_PATH - -.build_dns: - extends: .build_before_script - image: git.mesalab.cn:7443/mesa_framework/framework:master + - mkdir -p $BUILD_PADDING_PREFIX/$CI_PROJECT_NAMESPACE/ + - ln -s $CI_PROJECT_DIR $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH + - cd $BUILD_PADDING_PREFIX/$CI_PROJECT_PATH + - chmod +x ./ci/travis.sh script: - - cp src/dns.h /opt/MESA/include/MESA/ - - source /etc/profile.d/MESA.sh - - mkdir -p build - - cd build - - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE - - make + - yum makecache + - ./ci/travis.sh + - cd build + tags: + - share -.package_dns: - extends: .build_before_script - image: git.mesalab.cn:7443/mesa_framework/framework:master - script: - - cp src/dns.h /opt/MESA/include/MESA/ - - source /etc/profile.d/MESA.sh - - mkdir -p build - - cd build - - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE - - make package +branch_build_debug: + stage: build + extends: .build_by_travis + variables: + BUILD_TYPE: Debug + except: + - /^develop.*$/i + - /^master.*$/i + - tags -build: +branch_build_release: stage: build - extends: .build_dns - tags: - - share variables: - BUILD_TYPE: "Release" + BUILD_TYPE: RelWithDebInfo + extends: .build_by_travis except: + - /^develop.*$/i + - /^master.*$/i - tags -#build-docker: -# stage: build -# script: -# - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY -# - docker build -t $IMAGE_TAG . -# - docker push $IMAGE_TAG -# tags: -# - share -# only: -# - tags +develop_build_debug: + stage: build + extends: .build_by_travis + variables: + BUILD_TYPE: Debug + PACKAGE: 1 + artifacts: + name: "dns-$CI_COMMIT_REF_NAME-debug" + paths: + - build/*.rpm + only: + - /^develop.*$/i + - /^master.*$/i -dns-package: - stage: package - extends: .package_dns - tags: - - share - variables: - BUILD_TYPE: "Release" - artifacts: - name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME" - paths: - - ./build/*.rpm - only: - - tags +develop_build_release: + stage: build + extends: .build_by_travis + variables: + BUILD_TYPE: RelWithDebInfo + PACKAGE: 1 + artifacts: + name: "dns-$CI_COMMIT_REF_NAME-release" + paths: + - build/*.rpm + only: + - /^develop.*$/i + - /^master.*$/i -release: - stage: release - image: git.mesalab.cn:7443/mesa_framework/framework:master - tags: - - share + +release_build_release: + stage: build + variables: + BUILD_TYPE: RelWithDebInfo + PACKAGE: 1 + UPLOAD: 1 + PULP3_REPO_NAME: platform-stable-x86_64.el7 + PULP3_DIST_NAME: platform-stable-x86_64.el7 + extends: .build_by_travis + artifacts: + name: "dns-$CI_COMMIT_REF_NAME-release" + paths: + - build/*.rpm only: - tags + +release_build_release_devel: + stage: build variables: - ARTIFACTS_JOB: "dns-package" - PROJECT_NAME: "dns" - USER_DEFINE: "release" - script: - - /bin/bash -x ./autorelease.sh $CI_API_V4_URL $CI_PROJECT_URL $CI_PROJECT_ID $CI_TOKEN $CI_COMMIT_TAG $ARTIFACTS_JOB $CI_PROJECT_NAME $USER_DEFINE + BUILD_TYPE: RelWithDebInfo + ENABLE_DEVEL_SWITCH: "ON" + PACKAGE: 1 + UPLOAD: 1 + PULP3_REPO_NAME: platform-stable-x86_64.el7 + PULP3_DIST_NAME: platform-stable-x86_64.el7 + extends: .build_by_travis + artifacts: + name: "dns-$CI_COMMIT_REF_NAME-release" + paths: + - build/*.rpm + only: + - tags diff --git a/CMakeLists.txt b/CMakeLists.txt index d913898..740c640 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,10 +45,14 @@ else() set_target_properties(dns PROPERTIES OUTPUT_NAME ${lib_name}) endif() -install(TARGETS dns LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/plug/protocol/dns) -install(FILES bin/dns.inf DESTINATION ${CMAKE_INSTALL_PREFIX}/plug/protocol/dns) -install(FILES bin/dns.conf DESTINATION ${CMAKE_INSTALL_PREFIX}/conf/dns) -install(FILES src/${lib_name}.h DESTINATION /opt/MESA/include/MESA COMPONENT devel) +set(CPACK_RPM_USER_FILELIST "%config(noreplace) ${CMAKE_INSTALL_PREFIX}/plug/protocol/dns/dns.inf" + "%config(noreplace) ${CMAKE_INSTALL_PREFIX}/conf/dns/dns.conf") + + +install(TARGETS dns LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/plug/protocol/dns COMPONENT LIBRARY) +install(FILES bin/dns.inf DESTINATION ${CMAKE_INSTALL_PREFIX}/plug/protocol/dns COMPONENT PROFILE) +install(FILES bin/dns.conf DESTINATION ${CMAKE_INSTALL_PREFIX}/conf/dns COMPONENT PROFILE) +install(FILES src/${lib_name}.h DESTINATION /opt/MESA/include/MESA COMPONENT HEADER) file(GLOB DEMO diff --git a/ci/get-nprocessors.sh b/ci/get-nprocessors.sh new file mode 100644 index 0000000..43635e7 --- /dev/null +++ b/ci/get-nprocessors.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Copyright 2017 Google Inc. +# All Rights Reserved. +# +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This file is typically sourced by another script. +# if possible, ask for the precise number of processors, +# otherwise take 2 processors as reasonable default; see +# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization +if [ -x /usr/bin/getconf ]; then + NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN) +else + NPROCESSORS=2 +fi + +# as of 2017-09-04 Travis CI reports 32 processors, but GCC build +# crashes if parallelized too much (maybe memory consumption problem), +# so limit to 4 processors for the time being. +if [ $NPROCESSORS -gt 4 ] ; then + echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4." + NPROCESSORS=4 +fi diff --git a/ci/perpare_pulp3_netrc.sh b/ci/perpare_pulp3_netrc.sh new file mode 100644 index 0000000..8414bbb --- /dev/null +++ b/ci/perpare_pulp3_netrc.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh +set -evx +echo "machine ${PULP3_SERVER_URL}\nlogin ${PULP3_SERVER_LOGIN}\npassword ${PULP3_SERVER_PASSWORD}\n" > ~/.netrc diff --git a/ci/travis.sh b/ci/travis.sh new file mode 100644 index 0000000..40a2780 --- /dev/null +++ b/ci/travis.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env sh +set -evx + +chmod +x ci/get-nprocessors.sh +. ci/get-nprocessors.sh + +# if possible, ask for the precise number of processors, +# otherwise take 2 processors as reasonable default; see +# https://docs.travis-ci.com/user/speeding-up-the-build/#Makefile-optimization +if [ -x /usr/bin/getconf ]; then + NPROCESSORS=$(/usr/bin/getconf _NPROCESSORS_ONLN) +else + NPROCESSORS=2 +fi + +# as of 2017-09-04 Travis CI reports 32 processors, but GCC build +# crashes if parallelized too much (maybe memory consumption problem), +# so limit to 4 processors for the time being. +if [ $NPROCESSORS -gt 4 ] ; then + echo "$0:Note: Limiting processors to use by make from $NPROCESSORS to 4." + NPROCESSORS=4 +fi + +# Tell make to use the processors. No preceding '-' required. +MAKEFLAGS="j${NPROCESSORS}" +export MAKEFLAGS + +env | sort + +# Set default values to OFF for these variables if not specified. +: "${NO_EXCEPTION:=OFF}" +: "${NO_RTTI:=OFF}" +: "${COMPILER_IS_GNUCXX:=OFF}" + +# Install dependency from YUM +if [ -n "${INSTALL_DEPENDENCY_LIBRARY}" ]; then + yum install -y $INSTALL_DEPENDENCY_LIBRARY + source /etc/profile.d/framework.sh +fi +mkdir build || true +cd build + +cmake3 -DCMAKE_CXX_FLAGS=$CXX_FLAGS \ + -DCMAKE_BUILD_TYPE=$BUILD_TYPE \ + -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \ + -DENABLE_DEVEL=$ENABLE_DEVEL_SWITCH \ + .. + +make + +if [ -n "${PACKAGE}" ]; then + make package +fi + +if [ -n "${UPLOAD}" ]; then + cp ~/rpm_upload_tools.py ./ + python3 rpm_upload_tools.py ${PULP3_REPO_NAME} ${PULP3_DIST_NAME} *.rpm +fi + +#if [ -n "${UPLOAD_SYMBOL_FILES}" ]; then +# rpm -i tfe*debuginfo*.rpm +# cp /usr/lib/debug/opt/tsg/tfe/bin/tfe.debug /tmp/tfe.debuginfo.${CI_COMMIT_SHORT_SHA} +# sentry-cli upload-dif -t elf /tmp/tfe.debuginfo.${CI_COMMIT_SHORT_SHA} +#fi diff --git a/cmake/Package.cmake b/cmake/Package.cmake index abfd6be..1978f57 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -1,41 +1,56 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CPACK_PACKAGE_NAME "${lib_name}-debug") + set(MY_RPM_NAME_PREFIX "lib${lib_name}-debug") else() - set(CPACK_PACKAGE_NAME ${lib_name}) + set(MY_RPM_NAME_PREFIX "lib${lib_name}") endif() -message(STATUS "Package: ${CPACK_PACKAGE_NAME}") +message(STATUS "Package: ${MY_RPM_NAME_PREFIX}") set(CPACK_PACKAGE_VECDOR "MESA") set(CPACK_PACKAGE_VERSION_MAJOR "${VERSION_MAJOR}") set(CPACK_PACKAGE_VERSION_MINOR "${VERSION_MINOR}") set(CPACK_PACKAGE_VERSION_PATCH "${VERSION_PATCH}.${VERSION_BUILD}") set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) - -set(CPACK_COMPONENTS_ALL devel) -set(CPACK_RPM_PACKAGE_DEBUG 1) -set(CPACK_RPM_COMPONENT_INSTALL OFF) -set(CPACK_RPM_DEVEL_FILE_NAME "${PROJECT_NAME}-devel.rpm") -set(CPACK_RPM_DEVEL_DEBUGINFO_FILE_NAME "${PROJECT_NAME}-devel-debuginfo.rpm") +set(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}") +execute_process(COMMAND bash -c "echo -ne \"`uname -r | awk -F'.' '{print $5\".\"$6\".\"$7}'`\"" OUTPUT_VARIABLE SYSTEM_VERSION) # RPM Build set(CPACK_GENERATOR "RPM") -set(CPACK_RPM_AUTO_GENERATED_FILE_NAME ON) -set(CPACK_RPM_FILE_NAME "RPM-DEFAULT") set(CPACK_RPM_PACKAGE_VENDOR "MESA") -set(CPACK_RPM_PACKAGE_AUTOREQPROV "no") -set(CPACK_RPM_PACKAGE_RELEASE_DIST ON) -set(CPACK_RPM_DEBUGINFO_PACKAGE ON) +set(CPACK_RPM_PACKAGE_AUTOREQPROV "yes") +set(CPACK_RPM_PACKAGE_RELEASE_LIBRARY "on") +set(CPACK_RPM_DEBUGINFO_PACKAGE "on") +set(CPACK_RPM_PACKAGE_DEBUG 1) + +set(CPACK_RPM_COMPONENT_INSTALL ON) +set(CPACK_COMPONENTS_IGNORE_GROUPS 1) +set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP) +set(CPACK_COMPONENT_HEADER_DISPLAY_NAME "develop") + +set(CPACK_COMPONENT_LIBRARY_REQUIRED TRUE) +set(CPACK_RPM_LIBRARY_PACKAGE_NAME ${MY_RPM_NAME_PREFIX}) +set(CPACK_RPM_LIBRARY_FILE_NAME "${CPACK_RPM_LIBRARY_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm") +set(CPACK_RPM_LIBRARY_DEBUGINFO_FILE_NAME "${CPACK_RPM_LIBRARY_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm") + +set(CPACK_COMPONENT_LIBRARY_GROUP "library") +set(CPACK_COMPONENT_PROFILE_GROUP "library") + +set(CPACK_COMPONENT_HEADER_REQUIRED TRUE) +set(CPACK_RPM_HEADER_PACKAGE_NAME "${MY_RPM_NAME_PREFIX}-devel") +set(CPACK_RPM_HEADER_FILE_NAME "${CPACK_RPM_HEADER_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm") +set(CPACK_RPM_HEADER_DEBUGINFO_FILE_NAME "${CPACK_RPM_HEADER_PACKAGE_NAME}-debuginfo-${CPACK_PACKAGE_VERSION}-${SYSTEM_VERSION}.rpm") +set(CPACK_COMPONENT_HEADER_GROUP "header") + +set(CPACK_RPM_HEADER_PACKAGE_REQUIRES_PRE ${CPACK_RPM_LIBRARY_PACKAGE_NAME}) +set(CPACK_RPM_HEADER_PACKAGE_CONFLICTS ${CPACK_RPM_HEADER_PACKAGE_NAME}) + +set(CPACK_COMPONENTS_ALL LIBRARY HEADER PROFILE) set(CPACK_BUILD_SOURCE_DIRS "${CMAKE_SOURCE_DIR}") # Must uninstall the debug package before install release package -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CPACK_RPM_PACKAGE_CONFLICTS "${lib_name}-debug") -else() - set(CPACK_RPM_PACKAGE_CONFLICTS ${lib_name}) - # set(CPACK_STRIP_FILES TRUE) -endif() +set(CPACK_RPM_PACKAGE_CONFLICTS ${MY_RPM_NAME_PREFIX}) +# set(CPACK_STRIP_FILES TRUE) include(CPack) diff --git a/cmake/Version.cmake b/cmake/Version.cmake index b7d6110..752f20f 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -1,3 +1,4 @@ + # Using autorevision.sh to generate version information set(__SOURCE_AUTORESIVISION ${CMAKE_SOURCE_DIR}/autorevision.sh) @@ -37,7 +38,16 @@ set(VERSION_BUILD "${VCS_SHORT_HASH}") # print information message(STATUS "Version: ${VERSION}-${VERSION_BUILD}") +if(NOT DEFINE_GIT_VERSION) + option(DEFINE_GIT_VERSION "Set DEFINE_GIT_VERSION to OFF" OFF) + set(GIT_VERSION "${VERSION}-${CMAKE_BUILD_TYPE}-${VERSION_BUILD}-${VCS_BRANCH}-${VCS_TAG}-${VCS_DATE}") string(REGEX REPLACE "[-:+/\\.]" "_" GIT_VERSION ${GIT_VERSION}) -add_definitions(-DGIT_VERSION=${GIT_VERSION}) + +if(DEFINE_GIT_VERSION) + add_definitions(-DGIT_VERSION=${GIT_VERSION}) + option(DEFINE_GIT_VERSION "Set DEFINE_GIT_VERSION to OFF" ON) +endif() + +endif() -- cgit v1.2.3 From c8af64f3e169718f50fddb3c00c727be2f8a83c3 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Thu, 30 Apr 2020 10:47:23 +0800 Subject: 安装依赖头文件 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 2 +- src/dns.cpp | 25 ++----------------------- test/src/dns_test.c | 3 ++- 3 files changed, 5 insertions(+), 25 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index be8c2f2..b98dbaa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,7 +3,7 @@ variables: GIT_STRATEGY: "clone" BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/ INSTALL_PREFIX: "/opt/MESA/lib/" - INSTALL_DEPENDENCY_LIBRARY: libMESA_handle_logger-devel libMESA_htable-devel libMESA_field_stat2-devel sapp-devel framework_env libMESA_prof_load-devel + INSTALL_DEPENDENCY_LIBRARY: libMESA_handle_logger-devel libcjson-devel libMESA_field_stat2-devel sapp-devel framework_env libMESA_prof_load-devel sapp-devel stages: - build diff --git a/src/dns.cpp b/src/dns.cpp index dce9b39..bfacbc9 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -31,30 +31,9 @@ #include "dns.h" #include "dns_internal.h" -<<<<<<< .mine -int DNS_PROTOCOL_VERSION_20191212; +int DNS_PROTOCOL_VERSION_20200430; - - - - - - - - - - - - - - - - - - - -======= #ifdef __cplusplus extern "C" { @@ -77,7 +56,7 @@ static __attribute__((__used__)) const char * GIT_VERSION_UNKNOWN = NULL; #endif int DNS_PROTOCOL_VERSION_20191224; ->>>>>>> .theirs + unsigned long long dns_register_flag = 0; unsigned short dns_plugid = 0; static pthread_mutex_t dns_lock; diff --git a/test/src/dns_test.c b/test/src/dns_test.c index aaabfd3..80a416e 100644 --- a/test/src/dns_test.c +++ b/test/src/dns_test.c @@ -6,9 +6,10 @@ #include #include -#include #include +#include "dns.h" + #define LOG_PATH "./log/dns/" #define DEBUG 1 -- cgit v1.2.3 From 34689df78b0074f9ee3a25eaa3ca7ee188a6af17 Mon Sep 17 00:00:00 2001 From: 刘学利 Date: Thu, 30 Apr 2020 10:51:55 +0800 Subject: Delete dns.h --- src/dns.h | 349 -------------------------------------------------------------- 1 file changed, 349 deletions(-) delete mode 100644 src/dns.h diff --git a/src/dns.h b/src/dns.h deleted file mode 100644 index ed7512e..0000000 --- a/src/dns.h +++ /dev/null @@ -1,349 +0,0 @@ -#ifndef DNS_ANALYSE_H -#define DNS_ANALYSE_H - -#include - -#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 - -- cgit v1.2.3 From d62344559f6f4328adfb0b89d28073d092e9e532 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Thu, 30 Apr 2020 10:56:32 +0800 Subject: 将dns.h头文件从src目录移至include目录 修改CMakeLists.txt,指定dns.h头文件目录 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 1 + include/dns.h | 349 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 350 insertions(+) create mode 100644 include/dns.h 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 + +#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 + -- cgit v1.2.3 From c3d3a3e96377819b40fb4dd4594c35c59c68411e Mon Sep 17 00:00:00 2001 From: liuxueli Date: Thu, 30 Apr 2020 12:10:27 +0800 Subject: rpm中增加changelog信息 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmake/Package.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/Package.cmake b/cmake/Package.cmake index 1978f57..6b4f698 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -1,7 +1,7 @@ if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(MY_RPM_NAME_PREFIX "lib${lib_name}-debug") + set(MY_RPM_NAME_PREFIX "${lib_name}-debug") else() - set(MY_RPM_NAME_PREFIX "lib${lib_name}") + set(MY_RPM_NAME_PREFIX "${lib_name}") endif() message(STATUS "Package: ${MY_RPM_NAME_PREFIX}") @@ -14,6 +14,10 @@ set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) set(CPACK_PACKAGE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}") execute_process(COMMAND bash -c "echo -ne \"`uname -r | awk -F'.' '{print $5\".\"$6\".\"$7}'`\"" OUTPUT_VARIABLE SYSTEM_VERSION) +#execute_process(COMMAND bash -c "git log --branches=x10 --no-merges --date=local --show-signature --pretty=\"* %ad %an %ae %nhash: %H%ncommit:%n%B\" | awk -F\"-\" '{print "- "$0}' | sed 's/- \\*/\\*/g' | sed 's/- $//g' | sed 's/-/ -/g' | sed 's/[0-9]\\{2\\}:[0-9]\\{2\\}:[0-9]\\{2\\}//g'" OUTPUT_FILE "changelog.txt") +execute_process(COMMAND sh changelog.sh WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/cmake) +SET(CPACK_RPM_CHANGELOG_FILE ${PROJECT_SOURCE_DIR}/cmake/changelog.txt) + # RPM Build set(CPACK_GENERATOR "RPM") set(CPACK_RPM_PACKAGE_VENDOR "MESA") -- cgit v1.2.3 From daea46d5b38ee8c4cf813bd7067aab1d8794fd2f Mon Sep 17 00:00:00 2001 From: liuxueli Date: Thu, 30 Apr 2020 12:13:21 +0800 Subject: 修复install头文件路径错误 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 632b8c2..59f7512 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,7 @@ set(CPACK_RPM_USER_FILELIST "%config(noreplace) ${CMAKE_INSTALL_PREFIX}/plug/pro install(TARGETS dns LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/plug/protocol/dns COMPONENT LIBRARY) install(FILES bin/dns.inf DESTINATION ${CMAKE_INSTALL_PREFIX}/plug/protocol/dns COMPONENT PROFILE) install(FILES bin/dns.conf DESTINATION ${CMAKE_INSTALL_PREFIX}/conf/dns COMPONENT PROFILE) -install(FILES src/${lib_name}.h DESTINATION /opt/MESA/include/MESA COMPONENT HEADER) +install(FILES include/dns.h DESTINATION /opt/MESA/include/MESA COMPONENT HEADER) file(GLOB DEMO -- cgit v1.2.3 From a9c8dc1940ea802e792ed6f4eb39a1a5b73545a8 Mon Sep 17 00:00:00 2001 From: liuxueli Date: Thu, 30 Apr 2020 12:14:00 +0800 Subject: rpm中增加changelog信息 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmake/changelog.sh | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cmake/changelog.sh diff --git a/cmake/changelog.sh b/cmake/changelog.sh new file mode 100644 index 0000000..7d8bf7f --- /dev/null +++ b/cmake/changelog.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +branch=`git status | grep branch | awk '{print $NF}'` +git log --branches=$branch --no-merges --date=local --show-signature --pretty="* %ad %an %ae %nhash: %H%ncommit:%n%B" | awk -F"-" '{print "- "$0}' | sed 's/- \*/\*/g' | sed 's/- $//g' | sed 's/-/ -/g' | sed 's/[0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}//g' > changelog.txt -- cgit v1.2.3