2个版本

0.3.3 2024年6月8日
0.3.2 2024年2月10日

#115网络编程

Download history 44/week @ 2024-04-27 40/week @ 2024-05-04 24/week @ 2024-05-11 41/week @ 2024-05-18 38/week @ 2024-05-25 50/week @ 2024-06-01 1293/week @ 2024-06-08 697/week @ 2024-06-15 280/week @ 2024-06-22 166/week @ 2024-06-29 153/week @ 2024-07-06 45/week @ 2024-07-13 30/week @ 2024-07-20 87/week @ 2024-07-27 124/week @ 2024-08-03 103/week @ 2024-08-10

每月 346次下载

GPL-3.0-or-later

105KB
3K SLoC

关于

r-tftpd是一个具有RFC 7440 "windowsize"支持的TFTP服务器,它可以转发TFTP请求到HTTP服务器。

它允许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-ControlEtag等),资源保留在本地。它们在磁盘上不可访问,但由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