This is a simple in-memory TFTP server, implemented in Go. It is RFC1350-compliant, but doesn't implement the additions in later RFCs. In particular, options are not recognized.
The project has no external dependencies. Standard libraries and provided wire
package (curtesy of igneous.io) are used.
$ go build
$ ./go-tftp
- The in-memory store has no limitation on size, mind memory usage when testing and using to prevent OOM.
- Only binary mode is supported.
- Note, unit tests are missing, pending another evening of fun.
- The general purpose logger outputs to STDOUT, suitable to be packaged as a container.
- There is another logger, a registry of all RRQs and WRQs written to a file.
-Max-timeout int
TFTP max timeout (default 25)
-Rexmt-interval int
TFTP Retransmit interval (default 5)
-host string
TFTP interface address (default "127.0.0.1:6969")
-registryFile string
TFTP WRQ/RRQ registry. (default "tftpRegistry.log")
- Any
tftp
client can be used for testing. make sure to use binary mode. - Use
-race
if usinggo run
e.g.go run -race *.go
.
Example bash function to send a file:
function tftp_send() {
tftp $HOST $PORT << TFTP
verb
trace
binary
put $FILE
TFTP
}
Fetch a file:
function tftp_get() {
tftp $HOST $PORT << TFTP
verb
trace
binary
get $FILE back-$FILE
TFTP
}
- Unit tests.
- CI/CD, to validate tests, and package.
- Awesome GitHub badges :)
- Refactoring.
Feel free to reach out with comments etc.