Yaklang 升级: 更灵活的语法让写插件变得更轻松

Yaklang新语言引擎特性升级:报错优化、异常处理和更多语法
本文介绍了Yaklang语言引擎的最新更新,包括改进的报错信息展示、引入try-catch和小尾巴处理异常、增强的字符串功能、类型内置函数、多种For循环形式以及更严格的变量作用域和strict模式。

Yaklang 升级: 更灵活的语法让写插件变得更轻松

背景

前段时间 Yaklang 实现了重构,在实现原有语法的基础上增加了很多新的语法,非常的好用。在之前的一次更新中,我们悄咪咪的更新了语言引擎,现在经过了几个版本的迭代,新语言引擎逐渐稳定。本篇简单介绍下新语言引擎一些有意思的更新内容。完整的语言教程已经在官网更新 https://www.yaklang.com/docs/yak-basic/intro

报错信息

报错信息是最直观的,新引擎的报错更好看了,更方便我们写代码时排查错误。

错误信息中包含了触发异常的调用栈文件路径触发错误的代码所处结构(函数或是全局代码)行号和异常代码预览

错误处理

回顾下之前YAK的异常处理,很像Go的风格,例如

data,err = codec.DecodeBase64("aaa")
if err{
    log.info("decode error: %v",err)
    return
}
dump(data)

YAK还增加了die函数,有点类似assert ,有错误则直接panic,没错则什么也不处理

data,err = codec.DecodeBase64("aaa")
die(err)
dump(data)

本次更新增加了小尾巴,效果和die类似,如下,在函数调用后增加一个~,函数的最后一个返回值会被小尾巴吃掉,并且对它检查,如果不为空则panic。

data = codec.DecodeBase64("aaa")~
dump(data)

try-catch的支持如下,可以对代码块捕获panic信息,当出现panic时会直接进入catch代码块处理异常。不影响代码后续执行。

try-catch还可以与小尾巴一起使用,可以对 ` 从请求包提取url instance ` 这个代码块进行异常捕获,相较于之前每次函数调用都要处理error方便多了。

字符串

字符串在原本基础上,支持了前缀,包括b、f、x。前缀b用法和python类似,可以直接创建[]byte类型数据,前缀用法f类似javascript,可以通过${}执行表达式并拼接到字符串中,x是YAK特有的Fuzztag语法,与WebFuzzer的Fuzztag相同

除此之外还有一些有意思的语法糖,如字符串格式化、字符串切片,使用*重复字符串

类型内置函数

字符串、列表、字典类型都支持了内置函数,这里只演示几个比较常用的函数,全部函数可以去官网查看(代码补全也可以看)

For循环

除了支持传统的for i=0;i<n;i++ {}用法,还支持golang风格的for index,value = range list{},还有新增的python风格的for in

for v in ["a", "b", "c", "d"] {
    print(v)
}
// abcd

还有YAK风格的for-number用法,下面的for in和for range是等价的

for i in 4 {
    print(i)
}
// 0123
for i range 4 {
    print(i)
}
// 0123
for range 4 {
    print(1)
}
// 1111

作用域相关

新版本对作用域进行了更严格的限制,支持块级作用域

if true {
    a = 1
}
dump(a) // 输出为nil

顺便还解决了旧版本的老问题,以后可以这样使用了

for i = range 10{
    go func(i){
        print(i)
    }(i)
}
time.sleep(1)
// 输出 9861405732

支持闭包,闭包函数定义时会继承当前作用域,如下,虽然For循环结束了,但For代码块的作用域由于被闭包函数继承,所以并不会被销毁。

a = 1
for i = range 10{
    a = func(){
        println(i)
    }
}
a() // 输出9

STRICT模式

对于未声明的变量,Yaklang的处理方式是赋予nil值并在控制台warn log警告。但这种对未声明变量的使用,几乎都是非预期的,可能会造成一些非预期的错误,所以提供了strict模式。 在环境变量中添加YVMODE=strict即可开启

对于未声明变量,会在Yak Runner中标注出来,编译时会抛出编译错误

总结

本篇介绍了Yaklang的部分更新,真的很好用,师傅们可以在插件中使用新语法了,完整的介绍可以看官网 https://www.yaklang.com/docs/yak-basic/intro

Yak官方资源

Yak 语言官方教程:
https://yaklang.com/docs/intro/
Yakit 视频教程:
https://space.bilibili.com/437503777
Github下载地址:
https://github.com/yaklang/yakit
Yakit官网下载地址:
https://yaklang.com/
Yakit安装文档:
https://yaklang.com/products/download_and_install
Yakit使用文档:
https://yaklang.com/products/intro/
常见问题速查:
https://yaklang.com/products/FAQ

<think>我们正在讨论基于Yakit平台开发网络流量分析工具。首先,我们需要明确Yakit平台的能力和扩展方式。Yakit是Yaklang语言的GUI客户端,而Yaklang是一种面向网络安全领域的编程语言。因此,开发Yakit插件通常使用Yaklang。根据用户需求,开发一个网络流量分析工具需要包含以下功能:1.读取pcapng文件2.使用Suricata规则进行威胁识别(如Java反序列化攻击和SQL注入)3.创建状态卡片展示TCP数据包数和HTTP流数4.生成威胁表格5.实时新状态卡片6.完成网络安全流量分析学习路径如下:一、掌握Yakit插件开发基础-学习Yaklang语言基础语法(变量、函数、控制结构等)-了解Yakit插件系统,包括插件类型(如插件菜单、批量执行、数据展示等)和开发规范-参考官方文档和示例插件,熟悉Yakit提供的API,特别是与流量分析相关的API二、学习网络流量分析基础知识-掌握网络协议基础(特别是TCP/IP、HTTP等)-了解pcapng文件格式及其解析方法-学习Suricata规则语法,以便识别特定威胁(如Java反序列化攻击、SQL注入)-Suricata规则通常包括动作、协议、源/目的地址、端口、规则选项(如msg、content等)-例如,SQL注入的规则可能会检查HTTP请求内容中是否有特定的SQL关键字和语法三、使用Yaklang处理网络流量-利用Yaklang的`pcapx`包或第三方库(如`gopacket`的Yak封装)来读取pcapng文件-示例:使用`pcapx.Open()`打开pcap文件,然后循环读取数据包-解析TCP流和HTTP流:Yaklang提供了`http`包用于解析HTTP流量,但需要自己重组TCP流四、集成Suricata规则引擎-方案1:直接调用Suricata可执行文件(需用户安装Suricata),通过命令行执行分析,然后解析输出日志-方案2:在Yaklang中集成Suricata的规则解析引擎(可能较复杂,需要调用Suricata的库或使用go的Suricata解析库,通过Yaklang的cgo调用)-考虑到易用性,初期可能采用方案1,但需要用户安装Suricata-规则管理:允许用户自定义规则文件路径,或者使用内置的规则集(如EmergingThreats规则集)五、开发数据展示和实时新功能-使用Yakit的前端组件(如Echarts)来创建状态卡片(展示TCP数据包数、HTTP流数等)-使用表格组件展示检测到的威胁(包括威胁类型、源IP、目的IP、时间等)-实时新:在分析过程中实时新状态卡片和威胁表格,这需要利用Yakit的实时数据流能力(如`yakit.TableData`和`yakit.YakitLog`等)六、进阶功能-性能优化:对于大流量文件,可能需要分块处理或使用高效的方式-实时流量分析:除了离线pcapng文件,还可以考虑实时抓包分析(需要系统权限)-规则新:提供规则自动新功能七、调试和测试-使用测试用的pcapng文件(包含恶意流量)验证功能-调试规则是否被正确触发注意:在开发过程中,可以参考用户提供的引用[1]-[5]中关于Suricata的配置和日志分析,但我们的重点是如何在Yakit平台中整合这些功能。技术要点总结:1.Yaklang编程基础2.Yakit插件开发3.pcapng文件解析和流量分析4.Suricata规则的使用和日志解析5.Yakit前端组件的使用(实时数据展示)接下来,我们可以生成相关问题,但用户要求的是关于开发该工具的学习路径,因此我们按照上述路径进行回答。由于用户问题要求生成相关问题,我们生成以下问题供进一步学习:§§相关问题§§1.如何用Yaklang读取pcapng文件并解析TCP流?2.在Yakit插件中如何调用外部程序(如Suricata)并解析其输出?3.如何使用Yakit的实时数据展示组件创建动态新的状态卡片和威胁表格?4.Suricata规则如何编以识别Java反序列化攻击?5.如何优化Yakit插件处理大流量文件时的性能?现在,我们按照用户要求使用中文回答,并遵循系统级指令(数学公式格式等)。注意,这个问题中可能不会涉及数学公式,但我们仍要注意格式。</think> ### 基于 Yakit 平台的网络流量分析工具开发学习路径 开发基于 Yakit 的网络流量分析工具需掌握以下核心知识点,学习路径如下: #### **1. Yakit 平台基础** - **Yakit 插件开发框架**:学习 Yaklang 语法(集成 Python/Go 特性),掌握插件开发流程、API 接口调用及前端组件渲染机制[^3][^4]。 - **GUI 组件使用**:学习状态卡片(`Card`)、动态表格(`Table`)、实时数据流(`YakitStream`)等组件的调用方法。 #### **2. 流量数据解析** - **PCAPNG 文件处理**: - 使用 `pcapx` 库解析流量包,提取 TCP/UDP 会话流和 HTTP 请求(参考引用[1][4])。 - 示例代码: ```yak pcap, err := pcapx.Open("traffic.pcapng") packets := pcap.ReadAll() // 读取所有数据包 ``` - **协议解析**: - 实现 TCP 重组(`tcp.Reassembler`)和 HTTP 解析(`http.ParseRequest`),统计 TCP 数据包数、HTTP 流数[^3]。 #### **3. Suricata 规则集成** - **规则引擎配置**: - 学习 Suricata 规则语法(如检测 SQL 注入:`content:"SELECT"; classtype:web-sql-injection`),引用规则集文件(`.rules`)[^1][^3]。 - **威胁检测实现**: - 调用 Suricata API 或嵌入规则引擎(如 `libsuricata`),针对流量包匹配 Java 反序列化攻击(`content:"rO0"`)等威胁[^1][^5]。 - **日志分析**:解析 Suricata 告警日志(`eve.json`),提取威胁类型、源/目的 IP 等字段[^1][^4]。 #### **4. 数据可视化与实时新** - **状态卡片**: - 使用 `yakit.Output` 动态渲染 TCP 包数、HTTP 流数等统计信息。 - **威胁表格**: - 通过 `yakit.Table` 展示检测结果,支持排序和过滤(如按威胁等级排序)[^4]。 - **实时新机制**: - 结合 `yakit.Flow` 实现增量数据加载,使用定时任务(`cron`)或 WebSocket 推送新状态卡片[^4]。 #### **5. 安全分析扩展** - **高级威胁检测**: - 补充自定义规则(如检测 Java 反序列化攻击的 `ysoserial` 特征)。 - **优化策略**: - 异步处理大流量文件(协程并发),缓存解析结果提升性能[^4][^5]。 #### **6. 工具链集成** - **Yakit API 调用**:学习 `mitm` 模块实现流量劫持,或结合 Dalton 平台提交分析任务(引用[4])。 - **测试验证**:使用公开恶意流量包(如 malware-traffic-analysis.net)验证工具准确性[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值