Андрей Смирнов
Время чтения: ~22 мин.
Просмотров: 2

11 best free tftp servers for windows, linux and mac

Build & Install

Building from Source

depends on two other projects to build from source, libuEv
and lite. See their respective README for details, there should be
no real surprises, both use the familiar configure, make, make install.

To find the two libraries uftpd depends on . The package
name for your Linux distribution varies, on Debian/Ubuntu systems:

user@example:~/> sudo apt install pkg-config

uftpd, as well as its dependencies, can be built as packages on
Debian or Ubuntu based distributions. Download and install each of the
dependencies, and then run

The package takes care of setting up , create an
user and an home directory with write permissions for
all members of the group.

Provided the library dependencies were installed in . This
trick may be needed on other GNU/Linux, or UNIX,
distributions as well.

TFTP Server

// readHandler is called when client starts file download from server
func readHandler(filename string, rf io.ReaderFrom) error {
	file, err := os.Open(filename)
	if err != nil {
		fmt.Fprintf(os.Stderr, "%v\n", err)
		return err
	n, err := rf.ReadFrom(file)
	if err != nil {
		fmt.Fprintf(os.Stderr, "%v\n", err)
		return err
	fmt.Printf("%d bytes sent\n", n)
	return nil

// writeHandler is called when client starts file upload to server
func writeHandler(filename string, wt io.WriterTo) error {
	file, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_EXCL, 0644)
	if err != nil {
		fmt.Fprintf(os.Stderr, "%v\n", err)
		return err
	n, err := wt.WriteTo(file)
	if err != nil {
		fmt.Fprintf(os.Stderr, "%v\n", err)
		return err
	fmt.Printf("%d bytes received\n", n)
	return nil

func main() {
	// use nil in place of handler to disable read or write operations
	s := tftp.NewServer(readHandler, writeHandler)
	s.SetTimeout(5 * time.Second) // optional
	err := s.ListenAndServe(":69") // blocks until s.Shutdown() is called
	if err != nil {
		fmt.Fprintf(os.Stdout, "server: %v\n", err)

Free TFTP Server Software FAQs

How to set up DHCP for TFTP servers list

In Linux, use the following command structure to set up a list of TFTP servers for DHCP:

Just list the IP addresses of your TFTP servers separated by spaces.

How to find my TFTP server IP{ address

On Windows, in a command prompt window, issue the command:

netstat -an|more

On Linux, the command is:

netstat -an|grep 69

TFTP uses UDP port 69, so look for an entry in the results list that uses that port in order to identify the IP address of your TFTP server. The relevant line in the results list will be

udp <IP address>:69

How do I copy my router settings to a TFTP server?

Make sure that your TFTP server is running then connect to the device through SSH.

  1. Issue the command copy running-config tftp
  2. Enter the IP address of your TFTP server when prompted.
  3. Enter a file name where the configuration will be saved when prompted.

The extract will take place.

Why does my Linux system fail to network boot with TFTP errors?

A failure for Linux to load could be due to the kernel in the netboot image being incompatible with the kernel module packages due to a patch. Another reason could be insufficient base memory making the install process hang indefinitely or fall over. 


TFTPD32 or TFTPD64 is the 32-bit or 64-bit Windows version of a French open source network utility package that includes a TFTP server. The services provided in addition to the TFTP server include DHCP, Syslog server, log viewer etc. A TFTP client is also in the package if you need one to install on network devices receiving files.

TFTPD32/64 is the brainchild of Phillipe Jounin, who has made it available to the public under the European Union Public License. It’s been implemented in projects like Cisco’s PIX and Aironet, HP’s Alpha servers, and Juniper’s Netscreen. It also won CNET’s Five Star Award in 2009 and is probably the oldest utility of its kind.

Data structures

Error pack

All error packages are predefined globals which are ready to use given the address info and fd required to send.

typedef struct
    uint16_t opcode;
    uint16_t error_code;
    char message;
    size_t size;
} error_pack;

Client value

Client value is the value out of the (key, value) pair in the client pool dictionary. The key being the address.

typedef struct
    FILE* file_fd;
    char buffer;
    size_t buffer_size;
    uint16_t block_number;
    uint16_t resends;
    mode md;
    char temp_char;
    time_t last_action;
} client_value;

Server info

Server info holds various variables for receiving and sending and is mostly to avoid bloated parameter list.

typedef struct
    int32_t fd;
    sockaddr_in address;
    sockaddr_in received_from;
    char input;
} server_info;

Function list

int32_t main(int32_t argc, char **argv);
void int_handler(int32_t signal);
void exit_error(const char* str);
void start_server(server_info* server, char** argv);
void init_server(const char* port, server_info* server);
uint16_t convert_port(const char* port_string);
bool some_waiting(server_info* server);
gboolean timed_out(gpointer key, gpointer value, gpointer user_data);
guint client_hash(const void* key);
gboolean client_equals(const void* lhs, const void* rhs);
sockaddr_in* sockaddr_cpy(sockaddr_in* src);
void socket_listener(server_info* server);
void ip_message(sockaddr_in* client, bool greeting);
void send_error(server_info* server, error_code err);
void start_new_transfer(GHashTable* clients, server_info* server, char* root);
void continue_existing_transfer(GHashTable* clients, server_info* server);
void read_to_buffer(client_value* client);
size_t construct_full_path(char* dest, const char* root, const char* file_name);
int32_t get_mode(char* str);
void destroy_value(gpointer data);
client_value* init_client(mode m);

Причины, по которым могут не работать

Сервера могут работать некорректно, если вы не выполнили все необходимые настройки, описанные выше, или вводите какие-либо данные неправильно, перепроверьте всю информацию. Второй причиной для поломки являются сторонние факторы: неправильно настроенный роутер, Firewall, встроенный в систему или сторонний антивирус, блокирует доступ, правила, установленные на компьютере, мешают работе сервера. Чтобы решить проблему, связанную с FTP или TFTP сервером, необходимо точно описать, на каком этапе она появилась, только тогда вы сможете найти решение на тематических форумах.

Setting up TFTP Recovery/Install

The following procedure only describes how to set up a TFTP server over Ethernet for the TFTP recovery/install preparation process, it does not describe the device-specific flash recovery/install process. For the actual flash process you have to consult the vendor provided documentation, the Internet, the OpenWrt Forum or the OpenWrt device pages.

  1. Download the desired OpenWrt (or stock) firmware image to the designated TFTP directory on your computer.
  2. Set the IP address of your computer’s Ethernet interface as described in the Device Page for your model.
  3. Start the TFTP server on your computer.
  4. Power up the router and press a device-specific button to start firmware recovery over TFTP,
  5. or access boot loader recovery options and install recovery firmware over TFTP.

Spiceworks TFTP Server

Spiceworks is a well-known networking and IT community with various relevant software tools as well.

One of their offerings include a network administration app that bundles a TFTP server for network configuration tasks.

The app includes an inventory tab that gives you a snapshot of all your network devices and workstations.

It includes an interface for scheduling file transfers like backups, configuration restore files, and firmware updates.

SpiceWorks also provides advanced features like comparing a device’s current software configuration with a backup to detect changes that have been made.

Whether you need to reset your workstations to a software configuration periodically or just want to schedule safe backups for repairing errors in the future, SpiceWorks can handle your TFTP server needs.

You will need to register and create an account in order to download.

About TFTP

The Trivial File Transfer Protocol is a lightweight system for moving small files around a network. The protocol doesn’t include any encryption services, so it is not suitable for file transfers across the internet. The main usage of this system has been for distributing configuration files to network devices while they are starting up. TFTP is used as part of BOOTP and the Pre-boot Execution Environment. The protocol is defined in RFC 1350.

As BOOTP isn’t widely used anymore, the usefulness of TFTP is lessening. The DHCP process is becoming more popular. However, TFTP is still useful for the transfer of configuration snapshots to a central store and for the return of this data in cases where a device’s configuration needs to be rolled back. TFTP runs over UDP and contact is also initiated at port 69.

Original README.txt from codeplex source archive:

This is the complete source code for Tftpd32 and Tftpd64, the industry standard TFTP server.

The code has been splitted into 2 parts :

  • the GUI management
  • the background process

They communicate together by messages sent through a TCP socket. In addition to separate processing and display, this allow a remote monitoring for the service edition.

_common and _libs directories contains files which belongs to both parts.
GUI processing is in the _gui directory.
Demon and background processing is found into _services directory.
Initializations are in the _main directory

tftpd32.sln and .vcxproj files are the project files necessary for building the executables.

All code is released under the European Public License, which is compatible with the GPLv2.

Copyright notice from original author:

TFTPD32 and TFTPD64 are copyrighted 1998-2017 by Philippe Jounin (philippe@jounin.net) and released under the European Union Public License 1.1 (see either the help file or the file EUPL-EN.pdf for the full text of the license)

Tftpd32 and Tftpd64 use the following copyrights or contributions

  • MD5 part is from RSA Data Security
  • IP checksum computation is from Mike Muss
  • DHCP lease persistance is from Nick Wagner
  • DHCP opts 82, 42 and 120 from Jesus Soto
  • DHCP header file from The Internet Software

Comparison Between TFTP and FTP/SFTP

As I have mentioned at the beginning of this article, TFTP is not a secure protocol to use compared to FTP (File Transfer Protocol) or SFTP (Secure File Transfer Protocol) which uses SSH as underline protocol.

Let’s see their main differences:

Uses Unreliable UDP communication Uses Reliable TCP communication Uses Reliable TCP communication
Works on UDP port 69 Works on TCP port 20/21 Works on TCP port 22
Not Secure Medium Security (using username/password) Higher Security
No authentication Uses username/password Either username/password or SSH keys can be used
No encryption No encryption Traffic is Encrypted


  • Клиент TFTP можно установить с помощью мастера добавления компонентов.You can install the tftp client using the add Features Wizard.
  • Протокол TFTP не поддерживает ни проверку подлинности, ни механизм шифрования, поэтому при наличии может возникнуть угроза безопасности.The tftp protocol does not support any authentication or encryption mechanism, and as such can introduce a security risk when present. Установка клиента TFTP не рекомендуется для систем, подключенных к Интернету.Installing the tftp client is not recommended for systems connected to the Internet.
  • Клиент TFTP является необязательным программным обеспечением и помечен как устаревший в Windows Vista и более поздних версиях операционной системы Windows.The tftp client is optional software, and marked as deprecated on Windows Vista and later versions of the Windows operating system. Служба сервера TFTP больше не предоставляется корпорацией Майкрософт в целях безопасности.A tftp server service is no longer provided by Microsoft for security reasons.

Создание и настройка FTP

  1. Раскройте панель управления компьютером.

  2. Перейдите к разделу «Программы».

  3. Перейдите к подразделу «Программы и компоненты».

  4. Кликнете по вкладке «Включение и отключение компонентов».

  5. В развернувшемся окошке найдите древо «Службы IIS» и активируйте все компоненты, в него входящие.

  6. Сохраните результат и дождитесь, пока включённыеэлементы будут добавлены системой.

  7. Возвратитесь к главной странице панели управления и перейдите к разделу «Система и безопасность».

  8. Перейдите к подразделу «Администрирование».

  9. Откройте программу «Диспетчер служб IIS».

  10. В появившемся окошке обратитесь к древу, находящемуся в левой стороне программы, щёлкните правой кнопкой мышки по подпапке «Сайты» и перейдите к функции «Добавить FTP-сайт».

  11. Заполните поле с названием сайта и пропишите путь до папки, в которую будут отправляться принимаемые файлы.

  12. Начинается настройка FTP. В блоке IP-адрес поставьте параметр «Все свободные», в блоке SLL параметр «Без SSL». Включённая функция «Запускать сайт FTP автоматически» позволит серверу включаться самостоятельно каждый раз при включении компьютера.

  13. Проверка подлинности позволяется выбрать два варианта: анонимный — без логина и пароля, обычный — с логином и паролем. Отметьте те варианты, которые подходят вам.

  14. Создание сайта на этом завершается, но необходимо выполнить ещё некоторые настройки.

  15. Возвратитесь к разделу «Система и безопасность» и перейдите из него к подразделу «Брандмауэр».

  16. Откройте дополнительные параметры.

  17. В левой половине программы сделайте активной вкладку «Правила для входящих подключений» и активируйте функции «FTP сервер» и «Трафик FTP-сервера в пассивном режиме», кликая по ним правой кнопкой мышки и указывая параметр «Включить».

  18. В левой половине программы сделайте активной вкладку «Правила для исходящих подключений» и запустите таким же методом функцию «Трафик FTP-сервера».

  19. Следующий шаг — создание новой учётной записи, которая получит все права по управлению сервером. Для этого возвратитесь к разделу «Администрирование» и выберите в нём приложение «Управление компьютером».

  20. Находясь в разделе «Локальные пользователи и группы», выберите подпапку «Группы» и начните создание в ней ещё одной группы.

  21. Заполните все необходимые поля любыми данными.

  22. Перейдите к подпапке «Пользователи» и начните процесс создания нового пользователя.

  23. Заполните все необходимые поля и завершите процесс.

  24. Откройте свойства созданного пользователя и раскройте вкладку «Членство в группах». Кликнете по кнопке «Добавить» и внесите пользователя в группу, которую создавали чуть раньше.

  25. Теперь перейдите к папке, которая отдана для использования сервером FTP. Откройте её свойства и перейдите к вкладке «Безопасность», кликнете в ней по кнопке «Изменить».

  26. В открывшемся окошке кликнете по кнопке «Добавить» и внесите в список группу, которая была создана ранее.

  27. Выдайте все разрешения внесённой группе и сохраните внесённые изменения.

  28. Вернитесь к диспетчеру служб IIS и перейдите к разделу с созданным вами сайтом. Откройте функцию «Правила авторизации FTP».

  29. Кликнете правой клавишей мышки по незаполненному месту в развернувшемся подпункте и выберите действие «Добавить разрешающее правило».

  30. Отметьте галочкой пункт «Указанные роли или группы пользователей» и заполните поле именем зарегистрированной ранее группы. Разрешения необходимо выдать все: чтение и запись.

  31. Вы можете создать ещё одно правило для всех остальных пользователей, выбрав в нём «Все анонимные пользователи» или «Все пользователи» и установив разрешение только на чтение, чтобы никто кроме вас не мог редактировать данные, хранящиеся на сервере. Готово, на этом создание и настройка сервера завершена.

Solarwinds Free TFTP Server

Solarwinds offers a full suite of IT and network management software. Their free TFTP server is a stripped-down version of their Network Configuration Manager product, but it functions well for basic tasks like pushing out OS images to workstations or firmware to network devices periodically over an internal network.

It can handle files as large as 4 GB, concurrent transfers to many devices at once, and runs as a Windows service. It doesn’t have more advanced features like device backup and version control or change management tools, but it does manage which IP numbers are authorized for connections.


TFTP protocol is a trivial network protocol for files transmission. The client part of the protocol realization does not require significant calculation resources. Because of this TFTP protocol is often used for transmission of files to IP-phones, LAN routers and switches, and also for loading of diskless workstations.

In contrast to the widely distributed FTP protocol, TFTP does not contain built-in authorization and does not let the client list the folders contents on the server.

TFTP uses UDP protocol as transport. File transmission from the TFTP server is realized like this:

  1. The client sends TFTP READ packet containing the name of the requested file to the UDP 69 server port.
  2. The server, using a random UDP port number, sends to the client a TFTP DATA packet, containing a part of data from the file requested. In case if the file, requested by the client is missing, the server sends TFTP ERROR packet, containing the error description, to the client.
  3. Having received the TFTP DATA packet, the client sends TFTP ACK confirmation to the server. The server and the client continue TFTP DATA and TFTP ACK packets exchanging till the file is completely transmitted. In case one of the sides does not receive the expected packet during the timeout, the other side resends the packet.

TFTPD32 uses

The combination of functions in TFTPD32 saves you a lot of money because it removes the cost of buying a DHCP system, DNS server, Syslog server, and configuration manager. In each module, TFTPD32 just provides the basic services that you need to manage each of your networking tasks. For example, there aren’t any DHCP/DNS reconciliation functions and there is no IP Address Manager tool there to check for abandoned addresses.

TFTPD32 is an ideal starter network administration tool for small networks. As your network grows, you will find you need more analytical capabilities and more task automation. So, you will eventually outgrow TFTPD32. On a small network, the provision of basic functions and the lack of features is an advantage because if you are managing your network alone, you probably won’t have time to use those extra features anyway. On larger systems, your configuration management and address management responsibilities will quickly become unmanageable without more process automation and predictive alerts.

Do you use TFTPD32 for your network? Do you find it provides all of the functions that you need in order to manage your network? Do you add on extra tools to ensure you have all of the necessary capabilities to manage your network successfully? Leave a message in the Comments section below and let us know about your experience with TFTPD32.

Опции TFTP

Код опции 0x00 (конец строки) Значение опции 0x00 (конец строки)
строка в ASCII 1 байт строка в ASCII 1 байт

Опций может быть несколько. Тогда они будут следовать друг за другом. Порядок опций не важен.

В ответ на RRQ (или WRQ) с опциями, сервер должен прислать OACK со списком опций, которые сервер принял.
Наиболее распространённые опции:

Название Определена в Код опции
Размер блока blksize В качестве значения опции идёт число, принимающее значение от 8 до 65464, обозначающее размер блока.
Интервал повторной передачи (Timeout) timeout В качестве значения опции идёт число, принимающее значение от 1 до 255, обозначающее время ожидания перед повторной передачей блока в секундах.
Размер файла tsize В качестве значения опции идёт число, обозначающее размер передаваемого файла в байтах.

Continuing existing transfer

First we check if client exists in our pool. If not, he has no business sending acks so we respond with a error pack. If he does exists we check if block numbers match and if not, we resend the last package up to a resend quota, which upon reaching we send an error pack and remove the client from the pool.

If the block numbers do match, we check if the package size was not full which would mark the end of this transfer and the removal of this client from our pool. If we sent a full package we reset the ressend counter variable to 0, increment the block number (if at max value, set to 1), read the next 512 bytes from file and send them.

WhatsUp TFTP Server

Ipswitch is a software company that specializes in file transfer and network management tools. Their WhatsUp Gold TFTP Server is a free utility they offer for network engineers to add to their toolbox.

It allows automated file transfers to be set up for multiple computers and devices on an intranet with a dedicated schedule.

Whether you need a tool to reinstall a software configuration weekly or a way to push out firmware and application patches to dozens of devices, WhatsUp Gold can make your life easier.

Like other TFTP servers, it runs as an always-on service and can even schedule file transfers during low traffic hours.

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 network devices.

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 device firmware (think Apple TVs and Microsoft Surface for a few examples).

See also:

  • Best SCP servers
  • Best SFTP servers

What is TFTP Recovery over Ethernet?

On most devices, the vendor provided boot loader is a partition separated from the actual firmware. In case of a failed flash process or in case of a misconfiguration, the device’s boot loader usually is still untouched and fully working. It the boot loader has a built-in “TFTP recovery mode”, it enables to regain control of a device with a broken firmware partition, by allowing a recovery flash process (which will also reset your configuration to the device defaults).

For many routers the recovery works by starting a TFTP server on your computer. Then device with the broken firmware has to be started up in TFTP recovery mode. Some devices then will pull the network-provided firmware file over TFTP network protocol to the OpenWrt and hopefully recover with a successful emergency flash process.

Some devices do not have automatic pull function and they need manual TFTP copy commands in recovery mode to get firmware from TFTP and firmware install.

NOTE: Some other routers, e.g. many Netgear routers, have TFTP server on themselves, and the PC needs to act as TFTP client. The “TFTP recovery mode” can also mean that, so look carefully at info about your router to find out which method your router possibly supports.

The below article mainly advises on the “TFTP client at router” recovery.

TFTP Options

The TFTP client can request the server on the parameters of file transmission change by means of the TFTP options. The server can accept or reject one or another TFTP option, requested by the client. The client puts the list of the options requested to TFTP READ or TFTP WRITE request packets. In case the server supports TFTP options mechanism, it confirms the request by means of TFTP OACK packet and uses the confirmed settings on the file transmission.

For the moment, the following TFTP options are standardized:

  • TFTP blksize. On default the TFTP protocol intends data transmission by 512 bytes blocks. Regarding the fact that present local networks MTU is usually equal to 1500 bytes or more, this block size is not effective. TFTP blksize option let change the block size, improving data transmission effectiveness.
  • TFTP tsize. With help of the TFTP tsize option the client can request from the server the size of the file being transmitted.
  • TFTP timeout. TFTP timeout option allows the client to set server timeout for the file being transmitted.
  • TFTP multicast. This option enables multicast file transmission mode.

Additional information:

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 . 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 Windows service.

The ATFTP server supports multicast and is multithreaded which makes it a little more flexible to deploy in non-standard network installations. Use or to install it, depending on your Linux distribution.

9. atftpd

You’ll find the sparse configuration file for atftpd in . 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.

You’ll need a TFTP client. There are many, but the client is a quick and easy command line solution. To install is, use . Then connect and upload a file:

We can see the has been uploaded to the path specified in the config file

Key Features:

  • Command line
  • Built into Linux
  • Free TFTP Server for Linux

10. tftpd-hpa

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.

You’ll find the configuration file in :

Modify the settings as desired, then startup the server using .

Key Features:

  • Command-line
  • Straightforward

11. 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:

Then, 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 command:

 Key Features:

  • Native to Macs’ operating system
  • Command line
  • Free TFTP server for macOS


«Tftpd32 and Tftpd64 are released under the European Union Public License» -from original homepage.

  1. Scope of the rights granted by the Licence (European Union Public License)
    The Licensor hereby grants You a world-wide, royalty-free, non-exclusive, sub- licensable licence to do the following, for the duration of copyright vested in the Original Work:
    use the Work in any circumstance and for all usage,
    reproduce the Work,
    modify the Original Work, and make Derivative Works based upon the Work,
    communicate to the public, including the right to make available or display the Work or copies thereof to the public and perform publicly, as the case may be, the Work,
    distribute the Work or copies thereof,
    lend and rent the Work or copies thereof, sub-license rights in the Work or copies thereof
Рейтинг автора
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
Ссылка на основную публикацию
Похожие публикации