#udp #hub #lru-cache #cli-tool #udp-socket #sockets #min-sized-rust

app udpexchange

一个用于创建简单UDP网关的小型CLI工具;小型可执行文件大小的实验

2个版本

0.1.1 2023年10月18日
0.1.0 2023年10月3日

#17 in #hub

MIT/Apache

8KB
124 代码行

udpexchange

此程序遵循以下算法

  1. 监听指定地址的UDP套接字
  2. 对于每个传入的UDP数据报,记住源地址在LRU缓存中
  3. 将空数据报返回给发送者(ping/keepalives)
  4. 将非空数据报转发到每个已知未过期的地址(除发送者外)。

可选地,它可以记住一些最近的消息并将它们发送给新出现的客户端。

安全性

此服务可能会允许DDoS放大,因此不应公开运行。

小型可执行文件大小

该项目部分是一个实验,旨在使用Rust创建小型可执行文件,同时(部分?)访问libstd并使用合理的命令行参数解析器。

cargo build --release -Zbuild-std=std,panic_abort -Zbuild-std-features=panic_immediate_abort --target=x86_64-unknown-linux-musl --features=mini

应生成一个51千字节的可执行文件。

请注意,通过--features=mini激活的破解可能不稳定且不太便携。还可以通过使用eyra进一步减小尺寸。

安装

Github发行版下载预构建的可执行文件或使用源代码通过cargo install --path .cargo install udpexchange进行安装。

CLI选项

udpexchange --help 输出
Usage: udpexchange <listen_addr> [-t <timeout>] [-r]

Simple UDP service which replies to all other known clients

Positional Arguments:
  listen_addr       socket address to bind UDP to

Options:
  -t, --timeout     timeout, in seconds, to expire clients.
  -r, --replay      send recent accumulated messages to newly seen clients
  --help            display usage information

依赖项

~0.7–1.4MB
~29K SLoC