Last updated on:February 18, 2023 pm
本文将主要介绍和讲解Zeek脚本语言的数据类型,基于语法和属性
数据类型
基础数据类型
Zeek有以下内建数据类型
| 名称 | 描述 |
|---|---|
bool |
布尔型 |
count, int, double |
数值类型 |
time, interval |
时间类型 |
string |
字符串 |
pattern |
正则表达式 |
port, addr, subnet |
网络类型 |
enum |
枚举(用户定义类型) |
table, set, vector, record |
容器类型 |
function, event, hook |
可执行类型 |
file |
文件类型(仅用于写入) |
opaque |
不透明类型(用于某些内建功能) |
any |
任何类型(用于函数或容器) |
以下是每一种数据类型的详细说明
**
bool**:拥有T和F两种取值。支持比较运算(==,!=),逻辑运算和绝对值运算(|T|=1,|F|=0,类型为count)**
int**:64位有符号整型。支持算术,比较,逻辑,赋值和绝对值运算(运算结果类型为count)**
count**:64位无符号整型。支持的运算符和int相同,其中一元加减运算的结果的类型为int**
double**:双精度浮点型。支持的运算符与int相同**
time**:表示绝对时间的时间类型。time类型仅能通过double_to_time,current_time,network_time内建函数来赋值。time类型支持比较运算符。time类型相减能够产生interval类型数据,time类型的绝对值是double类型**
interval**:表示相对时间的时间类型。其格式为数字常数+时间单位,时间单位有usec,msec,sec,min,hr和day。以下几种均为正确的表达形式:3.5 min,3.5min,3.5mins,-12 hr**
string**:字符串类型。由双引号包括,脚本中不支持多行字符串- 支持
+拼接,=和+=来赋值。支持pp比较运算符。取绝对值运算可以计算出字符串的长度。支持in和!in来判断字符串包含关系 - 支持
\转义如:\\,\n,\t,\v,\b,\r,\f,\a,\onn(n为8进制数码),\xhh(h为16进制数码)。当Zeek无法识别转义字符串时将会忽略\,如\g将会变成g - 支持下标法访问字符串中的字符。但是不可以对下表法表示的字符串进行赋值修改,即它们是只读的
- 支持
**
pattern**:正则表达式类型。pattern常量是通过两个正斜杠/来创建的,并采用与flex词法分析器语法**
port**:表示传输层端口的数据类型。port常量由一个无符号整数和端口类型(\tcp,\udp,\icmpor\unknow)组成port类型支持比较运算符,且比较顺序为unknown<tcp<udp<icmp,比如65535/tcp<0/udpget_port_transport_proto和port_to_count是Zeek内建的函数,分别能够从port型数据提取传输协议(后面的协议字符串)和端口号(前面的count型端口号)
**
addr**:表示IP地址的类型。支持ipv4和ipv6,且支持其常规的表示方式- 支持比较运算符,比较大小时当作正常数值进行比较。如
192.168.99.254<192.168.100.0 - 可以通过
/来产生subnet型数据。并可以用in来判断一个addr是否属于subnet - 一个域名数据可能对应多个IP地址,因此常用
set[addr]来表示
- 支持比较运算符,比较大小时当作正常数值进行比较。如
**
subnet**:表示子网的类型。由addr和/network_prefix_size组成。如192.168.100.0/24和[fe80::]/64。subnet类型仅支持==和!=比较运算符**
enum**:枚举类型。且枚举类型的value不具备深层次的结构。仅支持==,!=和=运算符
高级数据类型
Zeek还有以下内建数据类型
| 名称 | 描述 |
|---|---|
table, set, vector, record |
容器类型 |
function, event, hook |
可执行类型 |
file |
文件类型(仅用于写入) |
opaque |
不透明类型(用于某些内建功能) |
any |
任何类型(用于函数或容器) |
- **
table**:表示映射关系的表类型。被映射的值称为index或者indices,映射的结果称为yield。是一种非常高效的索引类型,其内部实质为一个单哈希查找表 - **
set**:
基本语法
定义变量
定义函数
运算符
条件语句
循环语句
属性
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!