Skip to content

howerj/tftp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TFTP: Client/Server

Project Embeddable Non-blocking TFTP Client/Server Library
Author Richard James Howe
Copyright 2017-2018 Richard James Howe
License MIT
Email howe.r.j.89@gmail.com
Repository https://github.com/howerj/tftp

A TFTP Client/Server, as specified in RFC 1350.

This is a work in progress, and is not usable at the moment.

Goals

  • Portable

The functionality required by the TFTP logic should be provided as a bunch of function pointers which can be given to an instance of the TFTP server or client. This includes socket and file access functionality. This is to allow the program to be ported fairly easily to different platforms and perhaps even embedded ones.

  • Non-blocking

The state machine that drives the TFTP client/server should be non-blocking, it will not wait around for data to arrive but instead inform the user that there is nothing to do at the moment.

  • Easy-to-use

The API should be well documented and the program easy to use.

Non-Goals

These are NOT goals of the project:

  • Secure

Any security, like preventing arbitrary directory traversal, should be done by the programmer in the file-opening callback - preferably by white listing the files that can be read, and written to.

  • Runnable as an inetd service

This is project is meant to provide a simple client and server that someone could use for testing TFTP, not for anything else.

  • Implement the Optional Extensions

They're optional! Hence they will not be implemented.

To Do

  • Implement the client
    • Receive file
    • Send file
  • Implement the server
    • Receive file
    • Send file
  • Ensure compliance and battle test it
    • Make a small test suite
    • Lint everything
    • Fuzzy it with AFL http://lcamtuf.coredump.cx/afl/
    • Options for introducing errors
    • Test on remote targets
    • Test multiple concurrent connections
  • Port to Windows
  • Turn into library
  • Man pages