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
,\icmp
or\unknow
)组成port
类型支持比较运算符,且比较顺序为unknown
<tcp
<udp
<icmp
,比如65535/tcp
<0/udp
get_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 协议 ,转载请注明出处!