2个版本
0.3.3 | 2024年6月8日 |
---|---|
0.3.2 | 2024年2月10日 |
#115 在 网络编程
每月 346次下载
105KB
3K SLoC
关于
r-tftpd是一个具有RFC 7440 "windowsize"支持的TFTP服务器,它可以转发TFTP请求到HTTP服务器。
它允许RRQ
(读取)请求;WRQ
支持不完整,仅用于测试目的。
实现的标准
-
RRQ
: 是WRQ
: 仅用于测试目的;例如,仅接受数据但不存储它。也没有窗口大小支持- 仅实现“octet”(“二进制”)传输模式;“netascii”和“mail”不支持
- 块ID将从65535绕回到0
-
- 可以通过
--no-rfc2347
标志禁用(用于测试目的)
- 可以通过
-
- 仅针对
RRQ
,但WRQ
不支持
- 仅针对
使用方法
Usage: r-tftpd [OPTIONS]
Options:
-s, --systemd use systemd fd propagation
-p, --port <PORT> port to listen on [default: 69]
-l, --listen <IP> ip address to listen on [default: ::]
-m, --max-connections <NUM> maximum number of connections [default: 64]
-t, --timeout <TIMEOUT> timeout in seconds during tftp transfers [default: 3]
-f, --fallback <URI> fallback uri
-L, --log-format <FMT> log format [default: default] [possible values: default, compact, full, json]
-C, --cache-dir <DIR> directory used for cache files
--no-rfc2347 disable RFC 2347 (OACK) support; only useful for testing some clients
--wrq-devnull accept WRQ but throw it away; only useful for testing some clients
--disable-proxy disable proxy support
-h, --help Print help information
-V, --version Print version information
构建
make
cargo build
查看r-tftp.spec,了解如何使用makefile变量进行自定义。
独立
cd /var/lib/tftpboot && r-tftpd --port 1234
监听特权端口(例如标准69端口)需要CAP_NET_BIND_SERVICE
能力(参见man 7 capabilities
)。
systemd套接字激活
查看contrib/
代理模式
"r-tftpd"支持将TFTP请求转发到其他服务器。它可以通过创建指向URL的(死)符号链接来实现伪虚拟主机。
支持的URI
http://
+https://
方案接受以下修饰符,用加号分隔
-
nocache
: 下载的资源不会被缓存;默认情况下,应用常规HTTP缓存机制(Cache-Control
、Etag
等),资源保留在本地。它们在磁盘上不可访问,但由O_TMPFILE
创建。缓存定期清除
-
nocompress
:请求资源使用identity
编码;默认情况下,启用压缩。当启用压缩时,因为无法确定其大小,必须在事务开始时下载整个文件。
在不压缩的情况下,使用 Content-Length
信息,tftp 上传和 http 下载并行进行,这有助于避免 tftp 超时。
示例
$ tree
.
├── domain1 -> http+nocache://domain1.example.org/
├── domain2 -> http+nocompress://domain2.example.org/
├── existing
├── remote-file -> http+nocompress+nocache://domain3.example.org/some-file
└── subdir
└── file
$ r-tftp --fallback http://fallback.example.org/
请求路径 | 返回的资源 | 标志 |
---|---|---|
现有 |
本地 现有文件 |
|
子目录/文件 |
本地 子目录/文件 |
|
domain1/foo |
远程 http://domain1.example.org/foo |
不缓存 |
domain2/bar |
远程 http://domain2.example.org/bar |
不使用 http 压缩 |
远程文件 |
远程 http://fallback.example.org/remote-file |
不使用 http 压缩也不缓存 |
不在这里 |
远程 http://fallback.example.org/not-here |
许可证
GPL-3.0 或更高版本
依赖关系
~15–31MB
~577K SLoC