suricata命令行选项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了suricata命令行选项相关的知识,希望对你有一定的参考价值。

参考技术A 1、suricata命令行选项

命令行选项有两种方式:-后跟字符,--后跟单词。

-h  :显示一个简短的使用帮助概述

-V:显示Suricata的版本

-c <path>: 配置文件路径(suricata.yaml文件路径)。

-T: 测试配置文件

-v:小v选项使Suricata的输出更加冗长。多次提供更多的冗长。

-r <path>:运行在pcap离线模式(回放模式)从pcap文件读取文件。如果<path>指定了一个目录,那么该目录中的所有文件将按照维护文件间流状态的修改时间顺序进行处理。

--pcap-file-continuous:与-r选项一起使用,指示模式应保持活动状态,直到中断。这对于添加新文件而不是重置文件之间的流状态的目录非常有用。

--pcap-file-delete:与-r选项一起使用,指示模式应在处理pcap文件后删除它们。这对于pcap-file-continuous非常有用,它可以连续地将文件提供给一个目录,并在完成之后清理它们。如果未设置此选项,处理后将不会删除pcap文件。

-i <interface>:在-i选项之后,可以输入要用来嗅探数据包的接口卡。此选项将尝试使用可用的最佳捕获方法。跟libpcap有关。

--pcap[=<device>]:运行在PCAP模式。如果没有提供设备,则使用配置文件的pcap部分中提供的接口。

--af-packet[=<device>]:在Linux上启用使用AF_PACKET 捕获包。如果没有提供设备,则使用yaml中af-packet部分的设备列表。

-q <queue id>:内联运行提供的NFQUEUE队列ID。可能提供多次。

-s <filename.rules>:使用-s选项,您可以设置一个带有签名的文件,该文件将与yaml中设置的规则一起加载。

-S <filename.rules>:使用-S选项,您可以设置一个带有签名的文件,无论yaml中设置的规则如何,该文件都将被完全加载.

-l <directory>: 使用-l选项可以设置默认的日志目录。如果已经在yaml中设置了default-log-dir,那么如果使用-l选项,Suricata将不会使用它。它将使用使用-l选项设置的日志目录。如果没有使用-l选项设置目录,Suricata将使用在yaml中设置的目录。

-D:通常,如果您在您的控制台运行Suricata,它会占用您的控制台。您不能将它用于其他目的,当您关闭窗口时,Suricata将停止运行。如果您将Suricata作为守护进程运行(使用-D选项),它将在后台运行,您将能够在不影响引擎运行的情况下使用控制台执行其他任务

--runmode <runmode>:使用-runmode选项,您可以设置想要使用的runmode。这个命令行选项可以覆盖yaml runmode选项。运行模式是: workers ,  autofp  and  single .

-F <bpf filter file>:从文件中使用BPF过滤器。

-k [all | none]: 强制(all)检查校验和或禁用(none)所有校验和检查。

--user=<user>:初始化后设置进程的用户。覆盖配置文件run-as部分中提供的用户。

--group=<group>:初始化后将进程组设置为组。覆盖配置文件run-as部分中提供的组。

--pidfile <file>:将进程ID写入文件。覆盖配置文件中的pid-file选项,并强制在不作为守护进程运行时写入该文件。

--init-errors-fatal:当加载签名时遇到错误时,失败并退出。

--disable-detection:禁用检测引擎。

--dump-config:将从配置文件加载的配置转储到终端并退出。

--build-info:显示用Suricata编译的构建信息

--list-app-layer-protos:列出所有受支持的应用层协议

--list-keywords=[ all | csv | <kword> ]:列出所有受支持的规则关键字

--list-runmodes:列出所有支持的运行模式

--set <key>=<value>:设置配置值。用于覆盖配置中的基本配置参数。例如,要更改默认日志目录:--set default-log-dir=/var/tmp

--engine-analysis:打印引擎不同部分的分析报告并退出。请查看conf参数 engine-analysis 查看哪些报告可以打印

--unix-socket=<file>:使用file作为Suricata unix控制套接字。覆盖配置文件的unix-command部分中提供的文件名。

--pcap-buffer-size=<size>:设置PCAP缓冲区的大小(0 - 2147483647)

--netmap[=<device>]:在FreeBSD或Linux上启用使用NETMAP捕获数据包。如果没有提供设备,则使用yaml中的netmap部分中的设备列表。

--pfring[=<device>]: 启用PF_RING 包捕获。如果没有提供设备,将使用Suricata配置中的设备。

--pfring-cluster-id <id>:设置PF_RING集群ID

--pfring-cluster-type:设置PF_RING集群类型(集群循环、集群流)

-d <divert-port>:使用IPFW转移模式内联运行

--dag <device>:启用DAG卡上的数据包捕获功能。如果想捕获特定的传输数据流,则可以使用设备名称如“dag0:4” 选择该流。此选项可能提供多次读取多个设备 和/或 流。

--napatech:使用Napatech Streams API启用包捕获。

--mpipe:使用TileGX mpipe接口启用包捕获

--erf-in=<file>:以脱机模式运行,读取特定的ERF文件(Endace可扩展记录格式)。

--simulate-ips:在非IPS模式下运行时模拟IPS模式

2、单元测试

只有在使用-enable-unittests构建Suricata时,才可以使用内置单元测试。运行单元测试不需要配置文件。使用-l 提供输出目录。

-u:运行单元测试并退出。要求使用-enable-unittests 编译Suricata。

-U, --unittest-filter=REGEX:使用-U选项,您可以选择要运行哪个单元测试。此选项使用正则表达式。使用示例suricata -u -U http。

--list-unittests:列出所有的单元测试。

--fatal-unittests:在单元测试错误上启用致命故障。Suricata将退出,而不是继续更多的测试。

--unittests-coverage:显示单元测试覆盖率报告。

CCF 201403-3 命令行选项

试题编号: 201403-3
试题名称: 命令行选项
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。
  选项有两类:带参数的选项和不带参数的选项。一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"-a" 或"-b"。而带参数选项则由两个由空格分隔的字符串构成,前者的格式要求与无参数选项相同,后者则是该选项的参数,是由小写字母,数字和减号组成的非空字符串。
  该命令行工具的作者提供给你一个格式字符串以指定他的命令行工具需要接受哪些选项。这个字符串由若干小写字母和冒号组成,其中的每个小写字母表示一个该程序接受的选项。如果该小写字母后面紧跟了一个冒号,它就表示一个带参数的选项,否则则为不带参数的选项。例如, "ab:m:" 表示该程序接受三种选项,即"-a"(不带参数),"-b"(带参数), 以及"-m"(带参数)。
  命令行工具的作者准备了若干条命令行用以测试你的程序。对于每个命令行,你的工具应当一直向后分析。当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。命令行剩余的未分析部分不构成该命令的选项,因此你的程序应当忽略它们。
输入格式
  输入的第一行是一个格式字符串,它至少包含一个字符,且长度不超过 52。格式字符串只包含小写字母和冒号,保证每个小写字母至多出现一次,不会有两个相邻的冒号,也不会以冒号开头。
  输入的第二行是一个正整数 N(1 ≤ N ≤ 20),表示你需要处理的命令行的个数。
  接下来有 N 行,每行是一个待处理的命令行,它包括不超过 256 个字符。该命令行一定是若干个由单个空格分隔的字符串构成,每个字符串里只包含小写字母,数字和减号。
输出格式
  输出有 N 行。其中第 i 行以"Case i:" 开始,然后应当有恰好一个空格,然后应当按照字母升序输出该命令行中用到的所有选项的名称,对于带参数的选项,在输出它的名称之后还要输出它的参数。如果一个选项在命令行中出现了多次,只输出一次。如果一个带参数的选项在命令行中出 现了多次,只输出最后一次出现时所带的参数。
样例输入
albw:x
4
ls -a -l -a documents -b
ls
ls -w 10 -x -w 15
ls -a -b -c -d -e -l
样例输出
Case 1: -a -l
Case 2:
Case 3: -w 15 -x
Case 4: -a -b

关键词:string各种操作,map,心累

  1 #include<iostream>
  2 #include<map>
  3 #include<string>
  4 using namespace std;
  5 void final(map<string,string> &mc){
  6     for(map<string,string>::iterator it = mc.begin();it!=mc.end();it++){
  7         cout<<it->first<<" ";
  8         if(it->second != ""){
  9             cout<<it->second<<" ";
 10         }
 11     }
 12     cout<<endl;
 13     return;
 14 }
 15 int main(){
 16     //freopen("in2.txt","r",stdin);
 17     //建类型,mt:0带参数 1不带参数
 18     map<char,int> mt;
 19     string st;
 20     cin >> st;
 21     for(int i = 0;i<st.length();i++){
 22         if(st[i] != :){
 23             if(i!=st.length()-1){
 24                 if(st[i+1] == :){
 25                     mt[st[i]] = 0;
 26                 }
 27                 else{
 28                     mt[st[i]] = 1;
 29                 }
 30             }
 31             else{
 32                 mt[st[i]] = 1;
 33             }
 34         }
 35     }
 36     int l;
 37     cin >> l;
 38     //读行输出
 39     string cmd;
 40     getline(cin,cmd);
 41     for(int i = 0;i<l;i++){
 42         cout<< "Case " << i+1 << ": ";
 43         getline(cin,cmd);
 44         //定位第一个非空格位置:命令名 并去掉前面空格+命令名
 45         int loc = 0;
 46         loc = cmd.find_first_not_of(" ");
 47         if(loc < 0){
 48             loc = 0;
 49         }
 50         cmd = cmd.substr(loc);
 51         loc = cmd.find_first_of(" ");
 52         if(loc < 0){
 53             //这是个空命令,处理结束
 54             cout<<endl;
 55             continue;
 56         }
 57         else{
 58             cmd = cmd.substr(loc);
 59         }
 60         int flag = 0;//0等选项 1等参数 2结束改行处理
 61 
 62 
 63         map<string,string> mc;
 64         mc.clear();
 65 
 66         
 67         string lastcmd;//保存带参数的选项
 68         while(true){
 69             //定位第一个非空格位置,并去掉前部分空格
 70             loc = cmd.find_first_not_of(" ");
 71             if(loc < 0){
 72                 final(mc);
 73                 break;
 74             }
 75             else{
 76                 cmd = cmd.substr(loc);
 77             }
 78 
 79             //肯定有非空格字符了
 80         
 81             string subcmd;
 82             //存当前命令行的有效参数 mc:""
 83             //定位第一个空格位置,截取此命令
 84             loc = cmd.find_first_of(" ");
 85             if(loc < 0){
 86                 subcmd = cmd;
 87                 cmd = "";
 88             }
 89             else{
 90                 subcmd = cmd.substr(0,loc);
 91                 cmd = cmd.substr(loc);
 92             }
 93             if(flag == 0){
 94                 //当前状态是等待选项
 95                 if(subcmd.length() == 2
 96                     &&
 97                     subcmd[0] == -
 98                     &&
 99                     mt.count(subcmd[1])>0){
100                         //符合一个选项标准
101                     if(mt[subcmd[1]] == 0){
102                         //带参数的选项
103                         flag = 1;
104                         lastcmd = subcmd;
105                     }
106                     else{
107                         mc[subcmd]="";
108                     }
109                 }
110                 else{
111                     //不符合选项标准
112                     flag = 2;
113                     final(mc);
114                     break;
115                 }
116             }
117             else{
118                 //当前状态是等待参数
119                 mc[lastcmd]=subcmd;
120                 flag = 0;
121             }
122         }
123     }
124     return 0;
125 }

 

以上是关于suricata命令行选项的主要内容,如果未能解决你的问题,请参考以下文章

suricata -- 为Linux设置IPS/内联

求助大神,命令行选项语法错误,怎么解决

CCF-命令行选项(模拟)

ccf--20140303--命令行选项

CCF 201403-3 命令行选项

CCF 命令行选项