12 个版本

0.2.0 2024 年 5 月 21 日
0.1.11 2022 年 11 月 11 日
0.1.10 2022 年 9 月 17 日
0.1.9 2022 年 7 月 31 日
0.1.6 2022 年 1 月 30 日

#350网络编程

Download history 139/week @ 2024-05-17 19/week @ 2024-05-24

715 每月下载量

MIT 许可证

345KB
10K SLoC

resynth:一种网络数据包合成语言

Latest Version Documentation

关于

Resynth 是一种数据包合成语言。它可以从文本描述中生成网络流量(以 pcap 文件的形式)。它使版本控制数据包作为代码的工作流程成为可能,这对于各种数据包处理或安全研究应用(如 DPI 引擎或网络入侵检测系统)非常有用。

示例

以下是如何在 resynth 中表示 HTTP 请求和响应的示例

import ipv4;
import dns;
import text;

let cl = 192.168.0.1;
let sv = 109.197.38.8;

dns::host(cl, "www.scaramanga.co.uk", ns: 8.8.8.8, sv);

let http = ipv4::tcp::flow(
  cl/32768,
  sv/80,
);

http.open();

http.client_message(
  text::crlflines(
    "GET / HTTP/1.1",
    "Host: www.scaramanga.co.uk",
    text::CRLF,
  )
);

http.server_message(
  text::crlflines(
    "HTTP/1.1 301 Moved Permanently",
    "Date: Sat, 17 Jul 2021 02:55:05 GMT",
    "Server: Apache/2.4.29 (Ubuntu)",
    "Location: https://www.scaramanga.co.uk/",
    "Content-Type: text/html; charset=iso-8859-1",
    text::CRLF,
  ),
);

http.server_close();

您可以使用以下命令将其编译为 pcap 文件: resynth http.rsyn - 将创建一个名为 http.pcap 的文件。

目前支持的协议

您不仅可以编写任意的 TCP、UDP、ICMP 数据包、原始 IP 数据包和 IP 片段,还有库模块可以帮助您为以下协议创建数据包

  • VXLAN、ERSPAN 类型 I & II
  • DHCP
  • DNS
  • Netbios 名称服务(NBNS)
  • TLS(早期阶段,仍需要 SSL2 和常见扩展的支持,尽管您可以创建任意 TLS 帧)
  • I/O:可以创建包含外部文件内容的数据包

为什么不使用 $OTHER_TOOL?

  • Scapy 和基于 Python 的数据包生成框架:它们对于我的预期用例(模糊测试、实时高速数据包生成)来说非常慢,即使按照纯 Python 程序的标准也是如此。对于高吞吐量应用,我认为不可能在不添加其他专门用于加速的层的情况下自动透明地优化 scapy 程序。
  • flowsynth:Flowsynth 真的很不错,也是本项目的很大灵感来源。但它缺乏对高级协议的支持,以及我真正需要的那些扩展性。

未来方向

我计划将其与基于 DPDK 的数据包生成器结合起来,以构建一个网络性能测试套件(类似于 T-Rex)。想法是为语言添加多实例功能,以扩展流的数量。resynth 程序将被编译成一系列预定义的数据包模板,可以直接复制到 tx 环缓冲区中,并调制字段(例如,IP 地址和端口号)。这将把所有昂贵的操作从数据包发送主循环中移出,使我们能够以每 CPU 至少 20Gbps 的速度生成流量。

当前语言比较基础,但我计划增加以下功能

  • 更多内置类型:例如,有符号整数、布尔值、各种宽度的整数
  • 算术和逻辑运算符,以便构建复杂表达式
  • 将任何类型强制转换为字节的函数
  • 缓冲区连接的语法

我计划将以下协议添加到标准库中

  • 支持PMTU和TCP消息的分段
  • 对HTTP的更多直接支持
  • SMB2
  • ARP
  • DCE-RPC
  • 更多奇特的TCP/IP交互和更好的ICMP支持

依赖项

~3–12MB
~120K SLoC