DNS: add option --dns-show-type

This commit is contained in:
李通洲
2024-06-12 19:52:25 +08:00
committed by 李通洲
parent 218c553841
commit 0a899e1e80
7 changed files with 169 additions and 22 deletions
+47 -2
View File
@@ -10,7 +10,7 @@ void ffPrintDNS(FFDNSOptions* options)
{
FF_LIST_AUTO_DESTROY result = ffListCreate(sizeof(FFstrbuf));
const char* error = ffDetectDNS(&result);
const char* error = ffDetectDNS(options, &result);
if (error)
{
@@ -66,6 +66,17 @@ bool ffParseDNSCommandOptions(FFDNSOptions* options, const char* key, const char
if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs))
return true;
if (ffStrEqualsIgnCase(subKey, "show-type"))
{
options->showType = (FFDNSShowType) ffOptionParseEnum(key, value, (FFKeyValuePair[]) {
{ "both", FF_DNS_TYPE_BOTH },
{ "ipv4", FF_DNS_TYPE_IPV4_BIT },
{ "ipv6", FF_DNS_TYPE_IPV6_BIT },
{},
});
return true;
}
return false;
}
@@ -82,6 +93,22 @@ void ffParseDNSJsonObject(FFDNSOptions* options, yyjson_val* module)
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
continue;
if (ffStrEqualsIgnCase(key, "showType"))
{
int value;
const char* error = ffJsonConfigParseEnum(val, &value, (FFKeyValuePair[]) {
{ "both", FF_DNS_TYPE_BOTH },
{ "ipv4", FF_DNS_TYPE_IPV4_BIT },
{ "ipv6", FF_DNS_TYPE_IPV6_BIT },
{},
});
if (error)
ffPrintError(FF_DNS_MODULE_NAME, 0, NULL, FF_PRINT_TYPE_NO_CUSTOM_KEY, "Invalid %s value: %s", key, error);
else
options->showType = (FFDNSShowType) value;
continue;
}
ffPrintError(FF_DNS_MODULE_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT, "Unknown JSON key %s", key);
}
}
@@ -92,13 +119,29 @@ void ffGenerateDNSJsonConfig(FFDNSOptions* options, yyjson_mut_doc* doc, yyjson_
ffInitDNSOptions(&defaultOptions);
ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs);
if (defaultOptions.showType != options->showType)
{
switch (options->showType)
{
case FF_DNS_TYPE_IPV4_BIT:
yyjson_mut_obj_add_str(doc, module, "showType", "ipv4");
break;
case FF_DNS_TYPE_IPV6_BIT:
yyjson_mut_obj_add_str(doc, module, "showType", "ipv6");
break;
case FF_DNS_TYPE_BOTH:
yyjson_mut_obj_add_str(doc, module, "showType", "both");
break;
}
}
}
void ffGenerateDNSJsonResult(FF_MAYBE_UNUSED FFDNSOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module)
{
FF_LIST_AUTO_DESTROY result = ffListCreate(sizeof(FFstrbuf));
const char* error = ffDetectDNS(&result);
const char* error = ffDetectDNS(options, &result);
if (error)
{
@@ -141,6 +184,8 @@ void ffInitDNSOptions(FFDNSOptions* options)
ffGenerateDNSJsonConfig
);
ffOptionInitModuleArg(&options->moduleArgs);
options->showType = FF_DNS_TYPE_BOTH;
}
void ffDestroyDNSOptions(FFDNSOptions* options)
+8
View File
@@ -4,8 +4,16 @@
#include "common/option.h"
typedef enum FFDNSShowType {
FF_DNS_TYPE_IPV4_BIT = 1,
FF_DNS_TYPE_IPV6_BIT = 2,
FF_DNS_TYPE_BOTH = FF_DNS_TYPE_IPV4_BIT | FF_DNS_TYPE_IPV6_BIT,
} FFDNSShowType;
typedef struct FFDNSOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
FFDNSShowType showType;
} FFDNSOptions;