There is a wide variety of File Transfer Protocols (FTP) in use on the internet today. One of the most basic, and therefore most widely used to perform low-level single file transfers, is the Trivial FTP (TFTP) protocol. In this article, we’ll cover off the top 10 best TFTP servers for both Windows and Linux systems.
What is TFTP?
Current FTP sessions support a lot of different commands. While logged in to an FTP server, users can usually list, delete, rename, upload, or download files and change directories. In contrast, TFTP offers only the ability to upload or download a file and uses UDP over IP instead of the more standard TCP/IP stack. The protocol is not capable of allowing more advanced functionality but compensates by using the lockstep method of fault-tolerance that makes it extremely reliable. Due to this limited functionality, TFTP servers can have an extremely small footprint on the disk as well as in memory, making it ideal for use in embedded devices. TFTP servers are almost unheard of on the public internet these days, but are frequently found in devices like routers, media streamers, and mobile phones. It is the main way in which firmware files are pushed to these devices in order to upgrade or patch them.
Caution: TFTP has zero security. There is no concept of user accounts so anyone will be able to connect to your TFTP server. Ensure your server machine is secured in some other way such as with a firewall or by limiting the network interfaces the server listens on.
Linux is far and away the most common operating system on the type of devices where you’re likely to encounter a TFTP server. But, there is also a rich ecosystem of Windows and macOS devices that run firmware (think Apple TVs and Microsoft Surface for a few examples).
Windows TFTP servers
1. SolarWinds free TFTP server
The TFTP server offered by SolarWinds is a 100% free version which runs on Windows only. It is not an expiring trial. If offers basic functionality such as IP-range lockdown and can transfer files up to 4GB in size. It runs as a Windows service which makes it easier to manage with native Windows tools.
2. Windows TFTP Utility
The Windows TFTP Utility is a bare-bones TFTP server for Windows. It is extremely small and has almost no configuration options. One one hand, that allows the utility to be very small and fast. On the other hand, it means that you’re unable to specify some basic configuration such as which network interface to bind. The small size comes from a reliance on the .NET framework. But, if you do not already have the .NET framework installed for some other application, that can result in a heavy installation footprint so this utility may not be optimal for every use-case.
In addition, it comes with a .NET class that developers can use to incorporate TFTP into their own applications.
Tftpd32 is an immensely popular TFTP server for Windows. It is not only a sleek TFTP server, but also bolts on some other features. The list of additional features includes a DCHP server, a DNS server, SNTP (time) server, and a syslog server. It’s pretty difficult to come up with a scenario where you’d need that particular set of features in a single application, but using one or two in addition to a TFTP server may fulfil some need.
And don’t worry, there’s a 64-bit version as well.
4. WhatsUp Free TFTP Server
WhatsUP TFTP server is a product from IPSwitch. The TFTP server is geared towards network engineers that just need to get files where they belong with as little bother as possible. WhatsUp is a free tool, not a trial. There is almost no documentation available on the free WhatsUp TFTP server so it is hard to determine which use-cases it may best address.
5. haneWIN TFTP server
The haneWIN TFTP server is full-featured 32- and 64-bit TFTP server that runs on Windows XP/VISTA/20xx (servers)/7/8/10. It breaks from the TFTP model a bit by supporting access controls, which are not natively part of TFTP. This TFTP server can restrict IPs to only allow downloading or uploading and access to server directories. An interesting feature is that it can also be run completely on the command-line which makes it very useful for scripted actions. It also includes a TFTP client that runs as a DLL
The WinAgents suite of software includes a robust TFTP server that run on Platform: Windows 2000 (server), XP, 2003 (server), Vista, Windows 7 and 2008 (server). It supports 64-bit platforms as well, although it does so by running a 32-bit service. It has some limited access controls such as IP-based file access and uses only a single UDP port which makes implementation behind a firewall easier to handle. A very useful feature of WinAgents is the support for virtual file folders. This means you can create folders that appear to exist for TFTP users, but don’t have to exist in reality on the server’s disk. This feature can make file organization easier which is something notoriously painful with traditional TFTP.
7. Spiceworks TFTP server
The Spiceworks TFTP server is focussed on network management. Keeping all of your devices up-to-date, as well as ensuring all the configuration are standard across the organization, can be difficult. The Spiceworks TFTP server can help keep all your devices running current firmware and configs with minimal effort. One of the additional Spiceworks features is the ability to compare network configurations side-by-side with existing backups to quickly spot devices running outdated software. Small insights like that can help quickly pin down rogue behaviour in network segments.
Linux TFTP servers
There are a variety of TFTP servers available for most Linux distributions. A popular one is the Advanced TFTP server that comes in a package named
atftpd. The ‘d’ at the end of many Linux packages stands for daemon, which is a Unix-like term for an application that runs in the background. A Linux daemon is akin to a Window service. The ATFTP server supports multicast and is multithreaded which makes it a little more flexible to deploy in non-standard network installations. Use
yum to install it, depending on your Linux distribution.
$ sudo apt-get install atftpd Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: atftpd
You’ll find the sparse configuration file for atftpd in
`/etc/default/atftpd. Set up some quick options such as what ports to listen on, and whether to run as a daemon or via inet.d, and you’re ready to go.
$ cat atftpd USE_INETD=true OPTIONS="--tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 22.214.171.124-255 --mcast-ttl 1 --maxthread 100 --verbose=5 /srv/tftp"
You’ll need a TFTP client. There are many, but the
atftp client is a quick and easy command line solution. To install is, use
apt-get install atftp. Then connect and upload a file:
$ atftp 192.168.2.146 tftp> put emptyfile tftp> quit
We can see the
emptyfile has been uploaded to the path specified in the config file
$ ls -l /srv/tftp -rw-rw-r-- 1 jdw jdw 0 Nov 5 10:44 emptyfile
Another popular TFTP server for Linux is tftpd-hpa. Since the TFTP protocol is so simple, there are no really obvious advantages to choosing one TFTP server over another. However, due to dependencies and documentation deficiencies, sometimes one server will work better than another. If you’re unable to get atftpd working, give tftpd-hpa a try.
$ sudo apt-get install tftpd-hpa Reading package lists... Done Building dependency tree Reading state information... Done The following package was automatically installed and is no longer required: xinetd Use 'sudo apt autoremove' to remove it. Suggested packages: pxelinux The following NEW packages will be installed: tftpd-hpa
You’ll find the configuration file in
$ cat /etc/default/tftpd-hpa #/etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure"
Modify the settings as desired, then startup the server using
sudo service tftpd-hpa restart.
10. macOS TFTP server
macOS has a built in TFTP server that won’t be loaded by default. The easiest way to get it running is to simply type `sudo launchctl load -F /System/Library/LaunchDaemons/tftp.plist` and provide your password when prompted. You can use something like netstat to confirm it is running:
$ netstat -n | grep *.69 udp4 0 .69 .* udp6 0 .69 .*
The TFTP server is now running on port 69 waiting for connections. You can use any TFTP client to connect to the server and upload or download files. To shut down the TFTP server, simply use the
sudo launchctl unload -F /System/Library/LaunchDaemons/tftp.plist
As the internet advances and applications become more complex, it is easy to fall into the trap of thinking that older tools may no longer be useful. The reality is that computational advances frequently just abstract critical functionality into cohesive user interfaces, but the rubber still hits the road in the same way underneath. Fundamental tools like TFTP are critical in maintaining embedded device patches and configurations and will be around for a long time to come.