Table of Contents
1 Installation
If the network is available, you can install it directly via yum.
You can also download the rpm package first and then install it, download at http://rpmfind.net/linux/rpm2html/search.php?query=tftp-server
After installation, you can find an additional in.tftpd
file in the /usr/sbin
directory.
2 Configuration
in.tftpd
is managed through the xinetd
service. /etc/xinetd.conf
stores the default configuration of all services managed by xinetd
, and also the default configuration of tftpd
.
Add the tftp server
configuration to the /etc/xinetd.d/tftp
file. The configuration specified in this file will override the configuration in the /etc/xinetd.conf
file, and the default configuration will be used if no configuration is specified.
3 Start
Create a file directory and modify the file directory access rights
Set the boot self-start, and then start the service.
4 Testing
The tftp client uploads files via the put
command and downloads files via the get
command, but does not support list file server file and directory listings, nor does it support deleting files
All commands supported by tftp.
Test file upload and download.
5 Principles
5.1 Protocol Overview
TFTP is known as Trivial File Transfer Protocol
in English and Simple File Transfer Protocol in Chinese. It provides uncomplicated and low overhead file transfer service. The port number is 69. based on UDP protocol.
5.2 TFTP Message Types
- read file request packet: Read request, abbreviated as RRQ, corresponding to Opcode field value of 1
- write request packet: Write requst, abbreviated as WRQ, corresponding to the Opcode field value of 2
- file data packet: Data, abbreviated as DATA, corresponding to Opcode field value of 3
- response packet: Acknowledgement, abbreviated as ACK, corresponding to Opcode field value of 4
- error information package: Error, abbreviated as ERROR, corresponding to the Opcode field value of 5
5.3 TFTP Port Number Assignment
When TFTP clients send read request and write request messages, the destination port is 69, while Data, Acknowledgement, and Error do not use port 69, they use random ports 1024~5000.
Different operating systems have different port numbers, Linux uses 32768~61000, Windows uses 1025~5000
The Trivial File Transfer Protocol (TFTP) provides a minimalistic means for transferring files. It is generally used as a part of PXE booting or for updating configuration and firmware on devices which have limited memory such as routers, IP phones and printers.
Server
There are several TFTP server implementations, some of which are listed below.
Note: Make sure not to start different TFTP implementations at the same time. They will fail with an error got more than one socket
, because only one may listen to the default TFTP port 69
.
Install and then start tftpd.service
.
To modify service parameters edit /etc/conf.d/tftpd
.
This server includes a useful URL rewriting feature via the --map-file
option (--mapfile
in some versions). It allows requests to be altered via regular expressions so the files on the server do not have to match the view the client sees, and different files can be returned to different clients even if they request the same file.
Configure a map by adding --map-file /etc/tftpd.map
to /etc/conf.d/tftpd
and creating a file such as this:
/etc/tftpd.map
# Add the remote IP address as a folder on the front of all requests. r ^ \i/
This example file will result in each TFTP request being prefixed with the remote IP address. For example if the machine at 192.168.0.1 requests “boot.bin” and the TFTP server root is /srv/tftp
then the file /srv/tftp/192.168.0.1/boot.bin
will be returned (or /srv/tftp/::ffff:192.168.0.1/boot.bin
if the server is listening on an IPv6 port).
The available map file options are documented in in.tftpd(8) § FILENAME REMAPPING.
The --verbosity 5
option can be used to turn on all debugging messages. This is very useful for diagnosing why a machine will not successfully boot from the network, as the debug messages list all requests for files, whether rewrite rules were used, where the files were read from on the filesystem and whether the request was successful or not.
It is not possible to log messages to stdout/stderr, as only syslog is supported. This means the messages can be viewed with journalctl or similar.
Install and then start atftpd.service
.
To modify service parameters edit /etc/conf.d/atftpd
.
AUR is a simple (T)FTP server that can be run from the command line:
# uftpd -n -o ftp=0,tftp=69 /tmp/tftp
The option -o ftp=0
disables the FTP server and only runs TFTP. The server runs in read-only mode by default and passing -o writable
allows clients to put files on the server. The -o tftp=69
is redundant in the case of default port, but shows a way to select a different one.
Note: dnsmasq does not support file uploads.
See dnsmasq#TFTP server.
Client
Install and then tftp your day away!
$ tftp
The package contains both a server and a client with interactive and batch mode. The client binary is atftp
and supports both getting and putting files.
Standard has an ability to connect to a TFTP server and upload a file via:
$ curl -T FILE tftp://HOST
Download a file:
$ curl -o DESTINATION tftp://HOST/file
Where file
is relative to the TFTP root directory.
Для некоторых айтишных задач требуется поднять tftp-сервер, который обычно предназначен только для простой передачи файлов между устройствами. изначально так и разрабатывался, чтобы быть простым. Прочитать о его работе можно на Wikipedia.
Мне понадобился сервер tftp для того, чтобы слить настройки с уже настроенного коммутатора Cisco и при необходимости залить его обратно.
Для справки: tftp – это протокол передачи данных, который работает на транспортном протоколе на порту 69. Особой безопасности не предоставляет. Используется для загрузки бездисковых систем (нужен для загрузки первоначального загрузчика) и для обновления прошивок аппаратных sip-телефонов Cisco.
Этот протокол чувствителен к фрагментации сетевого пакета. Если фрагментация есть, то файл может передаваться не до конца. Чтобы проверить делятся пакеты или нет, нужно выставить правильное . На Windows это можно сделать программой Optimizer. Подробнее о программе и настройке здесь.
Есть две версии приложения:
tftpd32
— для 32-битной системы windows;tftpd64
— для 32-битной системы соответственно.
Данный tftp-сервер можно установить как для старой Windows XP, так и для современной Windows 10. На серверные ОС (Windows 2012 r2, Windows 2016 и др.), tftpd64 и tftpd32 встают тоже без проблем.
Порт tftp сервера по умолчанию — 69/UDP. Если подключение проходит через маршрутизатор, не забываем открыть 69 порт протокола.
Установка tftpd32 сервера на Windows
Для таких простых целей я выбрал замечательное приложение tftpd32/tftpd64. Найти его можно здесь.
Для того, чтобы развернуть tftp-сервер на своем рабочем месте необходимо:
- Загрузить нужный дистрибутив отсюда. Стоит обратить внимание, что дистрибутивы различаются по типу запуска: как службу (service edition) и как приложение (standard edition) и также по битности ОС. Для себя я выбрал пакет tftpd64 service edition (installer)
- После загрузки, устанавливаем загруженный дистрибутив, не изменяя абсолютно никаких параметров.
- Если Вы загрузили, как и я, дистрибутив с запуском в качестве службы, то стоит вручную запустить службу или просто перезапустить компьютер.
- Дальнейшей настройки этот сервер не требует, но для подстраховки все настройки должны выглядеть так как изображено на скрине:
Всё! Теперь можно подключаться к tftp и копировать файлы. У операционной системы Windows XP tftp-клиент установлен по умолчанию, а у Windows 7/8/10 его необходимо доставить через компоненты системы.
Как проверить работу сервера tftpd32?
Для того, чтобы передать файл необходимо открыть cmd.exe и выполнить команду:
tftp 192.168.1.10 GET имя_файла.txt
Для того, чтобы получить файл с tftp-сервера, есть команда:
tftp 192.168.1.10 PUT имя_файла.txt
Включать сервер tftp с таким «уровнем безопасности» можно только на короткое время, для выполнения каких-то сервисных работ, а лучше вообще делать это в изолированной сети.
Теги: cisco
и сеть
Комментарии
Применение
Основное назначение TFTP — обеспечение простоты реализации клиента. В этой связи он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини -АТС (CDR) и аппаратных маршрутизаторов/файрволов.
Безопасность
Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан). Обычно в Unix-системах tftpd доступен только каталог /tftpboot. Однако в старых TFTP-серверах было возможным получить файл паролей командой RRQ ../etc/passwd.
Дополнительная защита от доступа к произвольным файлам осуществляется с помощью смены корневого каталога на каталог tftpd (обычно /usr/TFTPRoot).
Типы пакета
Сначала в TFTP-пакете идет поле размером в 2 байта, определяющее тип пакета:
- Read Request (RRQ, #1) — запрос на чтение файла.
- Write Request (WRQ, #2) — запрос на запись файла.
- Data (DATA, #3) — данные, передаваемые через TFTP.
- Acknowledgment (ACK, #4) — подтверждение пакета.
- Error (ERR, #5) — ошибка.
Запросы на чтение и запись
Для начала передачи данных клиент должен послать серверу WRQ или RRQ-пакет. У обоих пакетов формат одинаковый:
В TFTP существует 2 режима передачи (режим Mail, определенный в IEN 133, признан устаревшим):
- netascii — файл перед передачей перекодируется в ASCII.
- octet — файл передается без изменений.
После получения RRQ-пакета сервером, он сразу начинает передачу данных. В случае с WRQ-запросом — сервер должен прислать ACK-пакет c номером пакета 0.
Процесс передачи данных
После получения запроса RRQ, сервер сразу посылает в качестве подтверждения пакет с данными и с ID пакета равным единице. В WRQ в качестве подтверждения используется ACK с ID равным нулю. Всего по TFTP можно передать 32 Мб (65536 * 512 / 1024²), однако из-за использования знакового int вместо беззнакового, размер подтверждения ограничен 16 мегабайтами. Однако если клиент и сервер поддерживают расширения протокола RFC 2347 и RFC 2348, то максимальный размер передаваемого файла увеличивается до 4Gb.
Опции TFTP
В RFC 2347 был предусмотрен формат опций, которые можно присоединять к окончанию RRQ-пакета и WRQ-пакета:
Опций может быть несколько. Тогда они будут следовать друг за другом. Порядок опций не важен.
В ответ на RRQ (или WRQ) с опциями, сервер должен прислать OACK с списком опций, которые сервер принял. Наиболее распространённые опции:
Ошибки
В TFTP информация об ошибке имеет следующий формат:
Код ошибки может принимать одно из значений, перечисленных в STD 33 (за исключением кода 8 — он описан в RFC 2347). Вот они:
Схема URI
В RFC 3617 определен формат URI для TFTP. Он имеет следующий вид:
tftp://[узел назначения]/[нужный файл];mode=[режим передачи]
tftp://example.com/todo.txt;mode=netascii
Стандарты
Библиография
- У. Ричард Стивенс. «Протоколы TCP/IP. Практическое руководство». Глава 15, «Простейший протокол передачи файлов TFTP». ISBN 5-7940-0093-7
- Х. Остерлох. «TCP/IP. Семейство протоколов передачи данных в сетях компьютеров». Глава 16 «Простейший протокол передачи файлов (TFTP)». ISBN 5-93772-039-3
Ссылки
- WinAgents TFTP Server Сервер TFTP для Windows с поддержкой разграничения прав доступа
- Tftpd32 Сервер TFTP с открытным исходным кодом для Windows
tftpd(8)
— страница справки man системного администратора FreeBSD- Innerdive TFTP Server Сервер TFTP для Windows. Рассчитан на высокие нагрузки.
- Установка и настройка tftp-сервера на ОС CentOS 6
- Запросы на чтение и запись
- Процесс передачи данных
Применение
Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС (CDR) и аппаратных маршрутизаторов/файрволов.
Безопасность
Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан). Обычно в Unix-системах tftpd доступен только каталог /tftpboot. Однако в старых TFTP-серверах было возможным получить файл паролей командой GET ../etc/passwd.
Дополнительная защита от доступа к произвольным файлам осуществляется с помощью на каталог tftpd (обычно /usr/TFTPRoot).
Типы пакета
Сначала в TFTP-пакете идет поле размером в 2 байта, определяющее тип пакета:
- Read Request (RRQ, #1) — запрос на чтение файла.
- Write Request (WRQ, #2) — запрос на запись файла.
- Data (DATA, #3) — данные, передаваемые через TFTP.
- Acknowledgment (ACK, #4) — подтверждение пакета.
- Error (ERR, #5) — ошибка.
- Options Acknowledgment (OACK, #6) — подтверждение опций.
Запросы на чтение и запись
Для начала передачи данных клиент должен послать серверу WRQ или RRQ-пакет. У обоих пакетов формат одинаковый:
В TFTP существует 2 режима передачи (режим Mail, определенный в IEN 133, признан устаревшим):
- netascii — файл перед передачей перекодируется в ASCII.
- octet — файл передается без изменений.
После RRQ-пакета сервер сразу начинается передача данных сервером. В случае WRQ-запросом сервер должен прислать ACK-пакет c номером пакета 0.
Процесс передачи данных
После получения запроса RRQ, сервер сразу посылает в качестве подтверждения пакет с данными и с ID пакета равным единице. В WRQ в качестве подтверждения используется ACK с ID равным нулю. Всего по TFTP можно передать 32 Мб (65536 * 512 / 1024²), однако из-за использования знакового int вместо беззнакового, размер подтверждения ограничен 16 мегабайтами. Однако если клиент и сервер поддерживают расширения протокола RFC 2347 и RFC 2348, то максимальный размер передаваемого файла увеличивается до 4Gb.
Опции TFTP
В RFC 2347 был предусмотрен формат опций, которые можно присоединять к окончанию RRQ-пакета и WRQ-пакета:
Опций может быть несколько. Тогда они будут следовать друг за другом. Порядок опций не важен.
В ответ на RRQ (или WRQ) с опциями, сервер должен прислать OACK с списком опций, которые сервер принял. Наиболее распространённые опции:
Ошибки
В TFTP информация об ошибке имеет следующий формат:
Код ошибки может принимать одно из значений, перечисленных в STD 33 (за исключением кода 8 — он описан в RFC 2347). Вот они:
Схема URI
В RFC 3617 определен формат URI для TFTP. Он имеет следующий вид:
tftp://[узел назначения]/[нужный файл];mode=[режим передачи]
tftp://example.com/todo.txt;mode=netascii
Стандарты
Библиография
- У. Ричард Стивенс. «Протоколы TCP/IP. Практическое руководство». Глава 15, «Простейший протокол передачи файлов TFTP». ISBN 5-7940-0093-7
- Х. Остерлох. «TCP/IP. Семейство протоколов передачи данных в сетях компьютеров». Глава 16 «Простейший протокол передачи файлов (TFTP)». ISBN 5-93772-039-3
Ссылки
- WinAgents TFTP Server Сервер TFTP для Windows с поддержкой разграничения прав доступа
- TFTP Server TFTPDWIN Сервер TFTP для Windows
tftpd(8)
– страница помощи man в (англ.)- Innerdive TFTP Server Сервер TFTP для Windows. Рассчитан на высокие нагрузки.
.
.
- Запросы на чтение и запись
- Процесс передачи данных
Применение
Основное назначение TFTP — обеспечение простоты реализации клиента. В связи с этим он используется для загрузки бездисковых рабочих станций, загрузки обновлений и конфигураций в «умные» сетевые устройства, записи статистики с мини-АТС (CDR) и аппаратных маршрутизаторов/файрволов.
Безопасность
Поскольку протокол не поддерживает аутентификации, единственный метод идентификации клиента — это его сетевой адрес (который может быть подделан). Обычно в Unix-системах tftpd доступен только каталог /tftpboot. Однако в старых TFTP-серверах было возможным получить файл паролей командой GET ../etc/passwd.
Дополнительная защита от доступа к произвольным файлам осуществляется с помощью на каталог tftpd (обычно /usr/TFTPRoot).
Типы пакета
Сначала в TFTP-пакете идет поле размером в 2 байта, определяющее тип пакета:
- Read Request (RRQ, #1) — запрос на чтение файла.
- Write Request (WRQ, #2) — запрос на запись файла.
- Data (DATA, #3) — данные, передаваемые через TFTP.
- Acknowledgment (ACK, #4) — подтверждение пакета.
- Error (ERR, #5) — ошибка.
- Options Acknowledgment (OACK, #6) — подтверждение опций.
Запросы на чтение и запись
Для начала передачи данных клиент должен послать серверу WRQ или RRQ-пакет. У обоих пакетов формат одинаковый:
В TFTP существует 2 режима передачи (режим Mail, определенный в IEN 133, признан устаревшим):
- netascii — файл перед передачей перекодируется в ASCII.
- octet — файл передается без изменений.
После RRQ-пакета сервер сразу начинается передача данных сервером. В случае WRQ-запросом сервер должен прислать ACK-пакет c номером пакета 0.
Процесс передачи данных
После получения запроса RRQ, сервер сразу посылает в качестве подтверждения пакет с данными и с ID пакета равным единице. В WRQ в качестве подтверждения используется ACK с ID равным нулю. Всего по TFTP можно передать 32 Мб (65536 * 512 / 1024²), однако из-за использования знакового int вместо беззнакового, размер подтверждения ограничен 16 мегабайтами. Однако если клиент и сервер поддерживают расширения протокола RFC 2347 и RFC 2348, то максимальный размер передаваемого файла увеличивается до 4Gb.
Опции TFTP
В RFC 2347 был предусмотрен формат опций, которые можно присоединять к окончанию RRQ-пакета и WRQ-пакета:
Опций может быть несколько. Тогда они будут следовать друг за другом. Порядок опций не важен.
В ответ на RRQ (или WRQ) с опциями, сервер должен прислать OACK с списком опций, которые сервер принял. Наиболее распространённые опции:
Ошибки
В TFTP информация об ошибке имеет следующий формат:
Код ошибки может принимать одно из значений, перечисленных в STD 33 (за исключением кода 8 — он описан в RFC 2347). Вот они:
Схема URI
В RFC 3617 определен формат URI для TFTP. Он имеет следующий вид:
tftp://[узел назначения]/[нужный файл];mode=[режим передачи]
tftp://example.com/todo.txt;mode=netascii
Стандарты
Библиография
- У. Ричард Стивенс. «Протоколы TCP/IP. Практическое руководство». Глава 15, «Простейший протокол передачи файлов TFTP». ISBN 5-7940-0093-7
- Х. Остерлох. «TCP/IP. Семейство протоколов передачи данных в сетях компьютеров». Глава 16 «Простейший протокол передачи файлов (TFTP)». ISBN 5-93772-039-3
Ссылки
- WinAgents TFTP Server Сервер TFTP для Windows с поддержкой разграничения прав доступа
- TFTP Server TFTPDWIN Сервер TFTP для Windows
tftpd(8)
– страница помощи man в (англ.)- Innerdive TFTP Server Сервер TFTP для Windows. Рассчитан на высокие нагрузки.
.
.
In this tutorial lesson we will learn how TFTP works and how a file is copied from a TFTP Server to TFTP Client.
TFTP RRQ (Read Request) and TFTP WRQ (Write Request) messages
Mainly there are two types of TFTP requests.
TFTP RRQ (Read Request) and TFTP WRQ (Write Request) messages are also are also used to establish a TFTP connection from a TFTP Client to a TFTP Server. Once the TFTP RRQ message or TFTP WRQ message is received at the TFTP Server, the data transfer is started either from the TFTP Server side or TFTP Client side.
TFTP DATA packet size
Please refer below table and then compare with the capture screenshot images provided at each steps below to understand the concept.
TFTP port numbers
By default, TFTP Server is listening to UDP port 69, but you can make it listen any UDP port number, by changing the port number configuration at the TFTP Server. Initial TFTP RRQ (Read Request) and TFTP WRQ (Write Request) message packets are sent to UDP port 69. Further communications from TFTP Server back to the TFTP Client is from a random port number belongs to Dynamic port number range.
TFTP Client uses a random port number belongs to Dynamic port number range.
You can verify the UDP ports used by TFTP Server and TFTP Client at packet capture screenshots copied in each of the below steps. First image in each step shows a graphical representation of the direction of packet flow and the second image is Wireshark capture screenshot of the corresponding TFTP message.
How TFTP (Trivial File Transfer Protocol) works
Below example explains about TFTP RRQ (Read Request) message and how file copy from TFTP Server to TFTP Client works. TFTP WRQ (Write Request) message and file write process to the TFTP Server works similar to below example, but with reverse flow of TFTP DATA packets and TFTP ACK packets.
The IP addresses of the TFTP Client computer and the TFTP Server computer used in this example are 192.168.10.100 and 192.168.10.10 respectively.
Step 1 – The first step in coping a file from TFTP Server to TFTP Client is by sending a TFTP RRQ (Read Request) message packet to the TFTP server. By default, TFTP Server is listening to UDP port 69 and therefore the initial TFTP RRQ (Read Request) message is sent to UDP port 69.
The Opcode for TFTP RRQ message is 1 and TFTP WRQ message is 2. Mode (Type) of transfer for text file is netascii.
Main point to note here is that further communications from TFTP Server to TFTP Client is not from UDP port 69. TFTP Server selects a dynamic UDP port number above 1023 for all further communications.
The TFTP file transfer is completed now.
Do you have any suggestions?
<!–
–>
Глава 15 TFTP: простой протокол
передачи данных
TFTP – это простой протокол
передачи файлов. Он, как правило, используется
при загрузке бездисковых систем (рабочие станции
или X терминалы). В отличие от протокола передачи
файлов (FTP – File Transfer Protocol), который мы опишем в главе 27 и который использует TCP, TFTP
использует UDP. Это сделано для того, чтобы
протокол был как можно проще и меньше. Реализации
TFTP (и необходимого UDP, IP и драйвера устройства)
могут поместиться в постоянной памяти (ПЗУ).
В этой главе приводится только краткое
описание TFTP, потому что в следующей
главе мы рассмотрим протокол Bootstrap, который
использует TFTP. Мы использовали протокол TFTP, когда
загружали из сети хост sun (см. рисунок
5.1). Он выдавал TFTP запрос, после того как получил
свой IP адрес с использованием RARP.
Обмен между клиентом и сервером начинается
с того, что клиент запрашивает сервер либо
прочитать, либо записать файл для клиента. В
стандартном варианте загрузки бездисковой
системы первый запрос – это запрос на чтение (RRQ).
На рисунке 15.1 показан формат пяти сообщений TFTP.
(Коды операций 1 и 2 имеют одинаковый формат.)
Первые 2 байта TFTP сообщения это код операции
(opcode). В запросе на чтение (RRQ) и в запросе на запись
(WRQ) имя файла (filename) указывает файл на сервере,
который клиент хочет либо считать, либо записать.
Мы специально показали на рисунке 15.1, что это имя
файла оканчивается нулевым байтом. Режим (mode) это
ASCII строка: netascii или octet (любая комбинация больших
или маленьких букв), которая также оканчивается
байтом 0. netascii означает, что данные являются
строками ASCII текста, причем каждая строка
оканчивается 2-символьной последовательностью
возврата каретки, за которой следует пропуск
строки (обозначается – CR/LF).
Рисунок 15.1 Формат пяти TFTP
сообщений.
И клиент и сервер должны иметь возможность
осуществить преобразование между этим форматом
и каким-либо другим (другой разделитель строк),
который используется на локальном хосте.
Передача octet обозначает, что данные будут
передаваться в виде 8-битных байтов без
интерпретации.
В случае запроса на запись (WRQ) клиент
посылает WRQ, указывая имя файла и режим. Если файл
может быть записан клиентом, сервер отвечает
подтверждением (ACK) с номером блока равным 0.
Клиент посылает первые 512 байт файла с номером
блока равным 1, сервер отвечает ACK с номером блока
равным 1.
Этот тип передачи данных
называется протоколом с остановкой и ожиданием
подтверждения (stop-and-wait) . Он используется только в
простых протоколах, таких как TFTP. Мы увидим в
разделе “Изменение размера
окна” главы 20, что TCP предоставляет другую
форму подтверждений, которая позволяет добиться
более высокой пропускной способности. TFTP
разработан таким образом, чтобы реализация была
как можно проще, а не для того чтобы повысить
пропускную способность.
Последний тип TFTP сообщений это сообщения об
ошибках, код операции (opcode) равен 5. Это как раз то,
чем сервер отвечает в том случае, если запрос на
чтение или запись не может быть обработан. Ошибки
чтения или записи в течении передачи файла также
приводят к тому, что отправляется сообщение об
ошибке, при этом передача прекращается. Номер
ошибки (error number) содержит цифровой код ошибки, за
которым следует сообщение об ошибке в ASCII
формате, которое может содержать дополнительную
информацию предоставляемую операционной
системой.
Давайте посмотрим, как работает протокол
TFTP. Мы запустим TFTP клиента на хосте bsdi и получим
текстовый файл с хоста svr4:
bsdi % tftp svr4
стартуем
TFTP клиента
tftp> get test1.c
получаем
файл с сервера
Received 962 bytes in 0.3 seconds
tftp> quit
разрываем
соединение
bsdi % ls -l test1.c
сколько
байт в полученном файле?
-rw-r–r– 1 rstevens staff 914 Mar 20 11:41 test1.c
bsdi % wc -l test1.c
и
сколько строк?
48 test1.c
Первый момент, который бросается в глаза,
заключается в том, что файл в Unix содержит 914 байт,
однако TFTP передает 962 байта. Воспользовавшись
программой wc, мы увидим, что в файле 48
строк, таким образом, 48 символов новой строки в Unix
были дополнены до 48 пар CR/LF, так как TFTP по
умолчанию осуществляет передачу в режиме netascii.
На рисунке 15.2 показан обмен пакетами.
1 0.0
bsdi.1106
> svr4.tftp: 19 RRQ “test1.c”
2 0.287080 (0.2871) svr4.1077 > bsdi.1106: udp 516
3 0.291178 (0.0041) bsdi.1106 > svr4.1077: udp 4
4 0.299446 (0.0083) svr4.1077 > bsdi.1106: udp 454
5 0.312320 (0.0129) bsdi.1106 > svr4.1077: udp 4
Рисунок 15.2 Обмен пакетами в случае TFTP.
В строке 1 показан запрос на чтение от
клиента к серверу. Порт назначения UDP для TFTP –
заранее известный порт 69, tcpdump
просматривает TFTP пакеты и печатает RRQ и имя файла.
Длина UDP данных печатается как 19 байт и
получается следующим образом: 2 байта – код
операции, 7 байт – имя файла, 1 байт равный 0, 8 байт
для netascii и еще 1 байт равный 0.
Следующий пакет приходит от сервера (строка
2) и содержит 516 байт: 2 байта – код операции, 2 байта
– номер блока и 512 байт данных. Строка 3 –
подтверждение на эти данные: 2 байта – код
операции и 2 байта – номер блока.
И последний пакет данных (строка 4) содержит
450 байт данных. 512 байт данных в строке 2 и эти 450
байт составляют 962 байта данных, полученные
клиентом.
Обратите внимание, что tcpdump не
печатает дополнительную информацию о протоколе
TFTP для строк 2 – 5, как он это сделал,
интерпретировав TFTP сообщение в строке 1. Это
происходит потому, что номер порта сервера
сменился между строками 1 и 2. Протокол TFTP требует,
чтобы клиент отправил первый пакет (RRQ или WRQ) на
заранее известный порт UDP сервера (69). Сервер
находит какой-либо неиспользуемый динамически
назначаемый порт (1077 на рисунке 15.2), который затем
используется сервером для дальнейшего обмена
пакетами между клиентом и сервером. Номер порта
клиента (1106 в данном примере) не меняется. tcpdump не
имеет представления о том, что порт 1077 на хосте svr4
используется TFTP сервером.
Причина, по которой меняется
номер порта сервера, заключается в том, что
сервер не должен захватывать заранее известный
порт на большой промежуток времени, требуемый на
передачу файла (что может занять от нескольких
секунд до нескольких минут). Вместо этого,
заранее известный порт остается доступным для
других TFTP клиентов, которые могут послать туда
свой запрос. Тогда как в это время передача
осуществляется через другой порт.
Обратимся к рисунку 10.6. RIP
сервер, которому необходимо послать клиенту
более чем 512 байт, отправляет обе UDP датаграммы с
заранее известного порта сервера. В случае TFTP
(из-за отличий в протоколе), долговременного
взаимодействия между клиентом и сервером не
осуществляется (которое, как мы сказали, может
занимать от секунд до минут). Если один процесс
сервера будет использовать заранее известный
порт все время, пока осуществляется передача
файла, возникнет необходимость отказать всем
последующим запросам, которые придут от других
клиентов, или один процесс сервера должен иметь
возможность осуществлять множественную
передачу файлов нескольким клиентам в одно и то
же время с одного и того же порта (69). Простейшее
решение заключается в том, что сервер переходит
на другой порт, после того как получил RRQ или WRQ.
Клиент определяет новый порт, когда он получает
первый пакет данных (строка 2 на рисунке 15.2), а
затем посылать все последующие подтверждения
(строки 3 и 5) на новый порт.
В разделе “Пример”
главы 16 мы увидим, как TFTP используется при
загрузке X терминалов.
Обратите внимание на то, что TFTP пакеты
(рисунок 15.1) не содержат никаких данных об имени
пользователя или пароле. Это брешь в секретности
характерная для TFTP. Так как TFTP был разработан для
использования в процессе загрузки, он не
предоставляет возможности передать имя
пользователя и пароль.
Эта характеристика TFTP была использована
многими хакерами, чтобы получить копии файла
паролей из Unix и затем расшифровать пароли. Чтобы
предотвратить подобный доступ, большинство TFTP
серверов в настоящее время регламентируют, какие
файлы могут быть получены с использованием TFTP
(как правило, файлы из директории /tftpboot
в Unix системах). Эта директория содержит только
загрузочные файлы, необходимые бездисковым
системам.
Для дополнительной безопасности TFTP сервер,
на Unix системе, обычно устанавливает свой
пользовательский идентификатор (UID) и
идентификатор группы (GID) в значения, которые не
могут быть назначены реальному пользователю. Это
позволяет доступ только к файлам, которые
доступны для чтения и записи всем.
TFTP – это простой протокол, разработанный
таким образом, чтобы помещаться в ПЗУ и быть
использованным только в процессе загрузки
бездисковых систем. Он использует небольшое
количество форматов сообщений и протокол
с остановкой и ожиданием подтверждения.
Чтобы позволить нескольким клиентам
загружаться одновременно, TFTP сервер
предоставляет несколько форм одновременной
работы. Так как UDP не предоставляет уникального
соединения между клиентом и сервером (как это
делает TCP), TFTP сервер создает новый UDP порт для
каждого клиента. Это позволяет разным клиентам
выдавать датаграммы, которые будут демультиплексированы
UDP модулем сервера, на основе номеров портов
назначения, вместо того чтобы это делал сам
сервер.
Протокол TFTP не предоставляет средства
безопасности. Большинство реализаций позволяет
доступ по протоколу TFTP только к файлам, которые
необходимы при загрузке.
В главе 27 мы рассмотрим
протокол передачи файлов (FTP – File Transfer Protocol),
который разработан для общих целей, а также
обеспечивает высокую пропускную способность при
передаче файлов.
- Прочитайте требования к хостам Host Requirements RFC, чтобы посмотреть, что
должен делать TFTP сервер, если он получит запрос, IP
адрес назначения которого является
широковещательным адресом.
- Как Вы думаете, что произойдет, когда номер
блока TFTP изменится с 65535 на 0? Говорится ли
что-нибудь по этому поводу в RFC 1350?
- Мы сказали, что TFTP отправитель осуществляет тайм-аут и повторную передачу, чтобы
отработать потерю пакетов. Как это отразится на
функционировании TFTP, когда он используется как
часть процесса загрузки?
- Что является ограничивающим фактором по
времени при передаче файла с использованием TFTP?
tftp – это простейший протокол обмена данных, чаще всего используется для обновления прошивок на сетевых устройствах Juniper или Cisco, установки прошивок OpenWrt.
tftp использует порт 69/udp.
TFTP – это сервер, поддерживающий простой протокол передачи файлов (RFC 783). Сервер TFTP работает на порту,
указанном в списке служб как tftp. Обычно сервер запускается посредством . Tftpd неудобен для использования с загрузчиком PXE; для этого используйте atftpd или tftpd-hpa.
# aptitude install tftpd openbsd-inetd
Редактируем в файле /etc/inetd.conf строку:
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
в моем случае нужно заменить пользователя от которого tftp запускается и расположение корневой директории, получаем:
tftp dgram udp wait darkfire /usr/sbin/tcpd /usr/sbin/in.tftpd /home/darkfire/tftp
Перезапускаем службу inetd:
# /etc/init.d/openbsd-inetd restart
tftpd установлен и настроен.
В Linux консольным клиентом является tftp
# yum install tftp
При запуске клиента единственным аргументом достаточно передать адресс сервера tftpd. Команды клиента:
Единственный параметр задает имя или адрес TFTP сервера. Команды:
Для Windows существует несколько программ реализующих сервер tftp, например SolarWinds TFTP Server. Я обычно использую годами проверенную программу Tftpd32.