Лабораторная работа №2 — Знакомство с системой
- Все лабораторные работы по сетевым протоколам в Linux
- Предыдущая лабораторная работа — Настройка системы для выполнения лабораторных
- Следующая лабораторная работа — Основные утилиты и команды просмотра настроек и мониторинга сети
Быстрый поиск
- Виртуальные машины VirtualBox
- Работа с последовательным портами
- Работа с сетевыми интерфейсами
- Сдача самостоятельных работ
- Самостоятельная работа
Цель лабораторной — познакомить изучающего с системой
Задачи лабораторной:
- Изучить логику работы последовательных портов;
- Изучить логику работы сетевых интерфейсов;
- Изучить алгоритм генерации отчёта по лабораторным;
Виртуальные машины VirtualBox
Каждая виртуальная машина по умолчанию имеет 4 COM-порта и 4 сетевых адаптера для организации подключения. При этом поддерживается до 36 псевдофизических (поскольку все интерфейсы ВМ на самом деле являются, очевидно, виртуальными; далее мы будем называть эти интерфейсы просто физическими, а виртуальными будем именовать программно реализованные внутри ВМ интерфейсы) и любое количество виртуальных интерфейсов.
Последовательные порты (COM-порты) представляют из себя аппаратные интерфейсы, позволяющие напрямую передавать информацию между абонентами на физическом уровне стека протоколов TCP/IP. COM-порты обозначаются в файловой системе в виде файлов специального типа, находящихся в директории /dev. Имена COM-портов обозначаются ttyS0-ttyS3 для портов 1-4 соответственно
Сетевые интерфейсы представлены в виде физических Ethernet-портов, позволяющих организовывать соединение устройств на интерфейсном и сетевом уровнях стека протоколов. Для работы с разного рода сетевыми настройками используется утилита iproute2(утилита предустановлена в образе виртуальной машины)
Работа с последовательным портами
ℹ Для настройки канала связи между двумя устройствами через COM-порты используется сокетное соединение (в VirtualBox оно называется Host Pipe).
Создание COM-соединения
📍 1. Создайте два клона с именами first и second согласно инструкции по клонированию.
📍 2. С помощью команды pysnap set VMName выведите текущие настройки COM-портов и сетевых интерфейсов:
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set first
first (poweroff)
COM1 TCP server, port 2326
COM2 off
COM3 off
COM4 off
NIC1 NAT
NIC2 null
NIC3 null
NIC4 null
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set second
second (poweroff)
COM1 TCP server, port 2327
COM2 off
COM3 off
COM4 off
NIC1 NAT
NIC2 null
NIC3 null
NIC4 null
(.pysnap) [papillon_rouge@localhost ~]$
📍 3. С помощью команды pysnap set VMName comN=[server|client]:[link_name] создайте COM-соединение двух машин. На одной из ВМ укажите значение server, на другой – client. Имя соединения должно совпадать
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set first com2=server:link
first (poweroff)
COM1 TCP server, port 2326
COM2 pipe server, creates "link" (/tmp/pysnap-link)
COM3 off
COM4 off
NIC1 NAT
NIC2 null
NIC3 null
NIC4 null
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set second com2=client:link
second (poweroff)
COM1 TCP server, port 2327
COM2 pipe client, connects to "link" (/tmp/pysnap-link)
COM3 off
COM4 off
NIC1 NAT
NIC2 null
NIC3 null
NIC4 null
📍 4. Запустите виртуальные машины. Для входа в систему каждой машины необходимо ввести логин (root) и пароль (root).
⚠ ДИСКРЕЙМЕР: Никогда не устанавливайте такие легко угадываемые пароли на свои персональные устройства!
Настройка имени пользователя
ℹ Для переименования виртуальной машины используется специальная команда sethostname (при смене имени виртуальной машины требуется повторный вход в систему):
📍 1. С помощью команды sethostname измените имена пользователей на first и second соответственно
@first
localhost login: root
Password:
[root@localhost ~]# sethostname first
first login: root
Password:
Last login: Fri Sep 5 13:09:38 UTC 2025 on ttyS0
[root@first ~]#
@second
localhost login: root
Password:
[root@localhost ~]# sethostname second
second login: root
Password:
Last login: Fri Sep 5 13:12:46 UTC 2025 on ttyS0
[root@second ~]#
Передача данных через COM-порты
ℹ Внутри виртуальной машины управление портами осуществляется с помощью команды stty. Без управляющих параметров она позволяет посмотреть текущие параметры портов. Для просмотра конкретного порта можно использовать перенаправление на нужный порт.
📍 1. С помощью команды stty -a < <dev-name> получите информацию о параметрах COM-порта №2 (ttyS1)
@first
[root@first ~]# stty -a < /dev/ttyS1
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany
-imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho
-extproc
[root@first ~]#
ℹ Для соединения устройств необходимо подготовить порты к передаче данных: включить режим raw для передачи просто последовательности байт, а также отключить дублирование данных на экран:
📍 2. С помощью команды stty raw -echo < <dev-name> подготовьте COM-порты для передачи
@first
[root@first ~]# stty raw -echo < /dev/ttyS1
[root@first ~]#
@second
[root@second ~]# stty raw -echo < /dev/ttyS1
[root@second ~]#
📍 3. Запустите команду cat <dev-name> на first для получения данных с порта
@first
[root@first ~]# cat /dev/ttyS1
📍 4. С second передайте через порт календарь
@second
[root@second ~]# cal > /dev/ttyS1
[root@second ~]#
ℹ Заметьте, что календарь будет прочитан в first:
@first
[root@first ~]# cat /dev/ttyS1
September 2025
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Работа с сетевыми интерфейсами
Сетевый интерфейсы могут быть настроены вручную на уже существующих машинах или автоматически добавлены при создании клонов.
Настройка eth-соединения
⚠ Для изменения параметров виртуальных машин их необходимо предварительно отключить (например, командой poweroff в командной строке ВМ, командой pysnap stop <VMName> в домашней консоли или из графического интерфейса самого VirtualBox)
📍 1. С помощью команды pysnap set VMName nicN=[net_name] создайте eth-соединение двух машин. Имя соединения должно совпадать: при указании у разных виртуальных машин одной и той же сети они автоматически соединяются через виртуальную ethernet-сеть и могут взаимодействовать в рамках этой сети (данное соединение аналогично соединению машин через коммутатор).
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set first nic2=intnet
first (poweroff)
COM1 TCP server, port 2326
COM2 pipe server, creates "link" (/tmp/pysnap-link)
COM3 off
COM4 off
NIC1 NAT
NIC2 internal network "intnet"
NIC3 null
NIC4 null
(.pysnap) [papillon_rouge@localhost ~]$ pysnap set second nic2=intnet
second (poweroff)
COM1 TCP server, port 2327
COM2 pipe client, connects to "link" (/tmp/pysnap-link)
COM3 off
COM4 off
NIC1 NAT
NIC2 internal network "intnet"
NIC3 null
NIC4 null
📍 2. Запустите виртуальные машины.
Настройка сетевых интерфейсов
📍 1. C помощью команды ip link покажите все сетевые интерфейсы на first:
@first
[root@first ~]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 08:00:27:77:45:6f brd ff:ff:ff:ff:ff:ff
altname enp0s3
altname enx08002777456f
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 08:00:27:47:8a:8c brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027478a8c
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 08:00:27:45:3d:0d brd ff:ff:ff:ff:ff:ff
altname enp0s9
altname enx080027453d0d
5: eth3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 08:00:27:7a:79:33 brd ff:ff:ff:ff:ff:ff
altname enp0s10
altname enx0800277a7933
[root@first ~]#
ℹ Система показывает 5 интерфейсов (4 физических и один логический loopback, для которого отправка в него вызывает приём данных из него же). Все интерфейсы на данный момент отключены.
📍 2. С помощью команды управления интерфейсом :new: ip link set eth1 up включите интерфейс с сетью intnet
⚠ Здесь и далее в лабораторных знаком :new: будет обозначаться вводимая в рамках лабораторных терминология. В будущем для команд, описываемых данной терминологией, не будет писаться сама команда, а будет использоваться упоминание термина. Список терминов и связанные с ним команды представлены на заглавной странице лабораторных
📍 3. Покажите параметры интерфейса с помощью команды ip link show eth1:
@first
[root@first ~]# ip link set eth1 up
[root@first ~]# ip link show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default q
len 1000
link/ether 08:00:27:47:8a:8c brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027478a8c
[root@first ~]#
Статус интерфейса стал UP, соединение включено.
📍 4. С помощью команды настройки IP-адресов :new: ip addr add dev <interface> <IPv4>/<mask> добавьте на интерфейс IP-адрес
📍 5. Покажите параметры интерфейса с сетью с помощью команды ip addr show eth1:
@first
[root@first ~]# ip addr add dev eth1 10.9.0.1/24
[root@first ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:47:8a:8c brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027478a8c
inet 10.9.0.1/24 scope global eth1
valid_lft forever preferred_lft forever
[root@first ~]#
📍 6. С помощью команд управления интерфейсом и команд настройки IP-адресов аналогично настройте second (При выборе IP-адреса номер сети для всех абонентов одной сети должен быть одинаковым)
@second
[root@second ~]# ip link set eth1 up
[root@second ~]# ip addr add dev eth1 10.9.0.2/24
[root@second ~]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:14:02:d0 brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx0800271402d0
inet 10.9.0.2/24 scope global eth1
valid_lft forever preferred_lft forever
[root@second ~]#
Передача данных через сетевые интерфейсы
Сгенерируем трафик для проверки соединения. Самый простой способ генерации трафика — команда ping -с<количество отправляемых пакетов> <dstIP>.
📍 1. С помощью команды ping -c5 <dstIP> сгенерируйте ICMP-трафик между абонентами
@first
[root@first ~]# ping -с5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.948 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.577 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.784 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.711 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.751 ms
--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 5105ms
rtt min/avg/max/mdev = 0.577/0.749/0.948/0.109 ms
[root@first ~]#
Для отслеживания трафика могут использоваться специальные утилиты, сканирующие сетевые интерфейсы и считывающие проходящий через них трафик.
📍 2. С помощью команды tcpdump -i eth1 -с2 запустите на second сканирование интерфейса
@second
[root@second ~]# tcpdump -i eth1 -c2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
📍 3. С помощью команды ping -c1 <ip address> выполните одиночный ping-запрос на ‘first’
@first
[root@first ~]# ping -c1 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.570 ms
--- 10.9.0.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.570/0.570/0.570/0.000 ms
[root@first ~]#
ℹ Убедитесь, что данные о ping-сообщении были считаны:
@second
[root@second ~]# tcpdump -i eth1 -c2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
15:27:43.398843 IP 10.9.0.1 > second: ICMP echo request, id 3, seq 1, length 64
15:27:43.398872 IP second > 10.9.0.1: ICMP echo reply, id 3, seq 1, length 64
2 packets captured
2 packets received by filter
0 packets dropped by kernel
[root@second ~]#
Сдача самостоятельных работ
Создание отчета
ℹ Для сдачи самостоятельных работ используется специальная утилита report, создающая tar-архив с записью команд в системе.
📍 1. С помощью команды report <#Lab> <hostname> запустите запись отчёта на обеих машинах:
@first
[root@first ~]# report 1 first
Report is started. Task: 01; host: first.
Use exit or ^D to finish.
[root@01-first ~]#
@second
[root@second ~]# report 1 second
Report is started. Task: 01; host: second.
Use exit or ^D to finish.
[root@01-second ~]#
ℹ Затем необходимо будет выполнять указанные в самостоятельной работе команды. Сейчас выполним на каждой виртуальной машине следующие команды:
ip a show eth1ping -c5 <адрес другого абонента>
📍 2. На каждой машине выполните описанные команды в режиме report. Затем завершите запись с помощью команды exit или сочетания клавиш Ctrl+D
@first
[root@01-first ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:da:00:dd brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027da00dd
inet 10.9.0.1/24 scope global eth1
valid_lft forever preferred_lft forever
[root@01-first ~]# ping -c5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.635 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.712 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.558 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.927 ms
--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4132ms
rtt min/avg/max/mdev = 0.531/0.672/0.927/0.142 ms
[root@01-first ~]#
<^D>exit
Report is stopped.
[root@first ~]#
@second
[root@01-second ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:e1:50:ee brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027e150ee
inet 10.9.0.2/24 scope global eth1
valid_lft forever preferred_lft forever
[root@01-second ~]# ping -c5 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
64 bytes from 10.9.0.1: icmp_seq=1 ttl=64 time=0.648 ms
64 bytes from 10.9.0.1: icmp_seq=2 ttl=64 time=0.780 ms
64 bytes from 10.9.0.1: icmp_seq=3 ttl=64 time=0.832 ms
64 bytes from 10.9.0.1: icmp_seq=4 ttl=64 time=0.569 ms
64 bytes from 10.9.0.1: icmp_seq=5 ttl=64 time=0.758 ms
--- 10.9.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.569/0.717/0.832/0.095 ms
[root@01-second ~]# exit
exit
Report is stopped.
[root@second ~]#
ℹ После записи в домашнем каталоге появится файл report.<#Lab>.<hostname>. С помощью ls -l можно убедиться в предварительной корректности записи (число после слова root показывает размер файла, он должен быть ненулевой), а с помощью команды report <report-name> можно “проиграть” запись команд.
📍 3. С помощью команды report <report-name> запустите получившиеся отчёты
@first
[root@first ~]# ls -l
total 12
drwxr-xr-x 2 root root 4096 May 12 17:18 bin
-rw-r--r-- 1 root root 2621 Oct 13 12:28 report.01.first
drwx------ 2 root root 4096 May 12 17:19 tmp
[root@first ~]# report report.01.first
Replay report.01.first
[root@01-first ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:da:00:dd brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027da00dd
inet 10.9.0.1/24 scope global eth1
valid_lft forever preferred_lft forever
[root@01-first ~]# ping -c5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.635 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.712 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.558 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.927 ms
--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4132ms
rtt min/avg/max/mdev = 0.531/0.672/0.927/0.142 ms
[root@01-first ~]#
exit
Replay report.01.first finished
[root@first ~]#
@second
[root@second ~]# ls -l
total 12
drwxr-xr-x 2 root root 4096 May 12 17:18 bin
-rw-r--r-- 1 root root 2498 Oct 13 12:29 report.01.second
drwx------ 2 root root 4096 May 12 17:19 tmp
[root@second ~]# report report.01.second
Replay report.01.second
[root@01-second ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:e1:50:ee brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027e150ee
inet 10.9.0.2/24 scope global eth1
valid_lft forever preferred_lft forever
[root@01-second ~]# ping -c5 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
64 bytes from 10.9.0.1: icmp_seq=1 ttl=64 time=0.648 ms
64 bytes from 10.9.0.1: icmp_seq=2 ttl=64 time=0.780 ms
64 bytes from 10.9.0.1: icmp_seq=3 ttl=64 time=0.832 ms
64 bytes from 10.9.0.1: icmp_seq=4 ttl=64 time=0.569 ms
64 bytes from 10.9.0.1: icmp_seq=5 ttl=64 time=0.758 ms
--- 10.9.0.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4004ms
rtt min/avg/max/mdev = 0.569/0.717/0.832/0.095 ms
[root@01-second ~]# exit
exit
Replay report.01.second finished
[root@second ~]#
Извлечение отчета из ВМ
Следующим шагом необходимо перенести полученные отчёты из виртуальных машин в основную систему.
📍 1. Не выключая ВМ, в отдельном окне терминала запустите команду pysnap report extract VMName REPORT_Name
(.pysnap) [papillon_rouge@localhost ~]$ pysnap report extract first report.01.first
Extracted "$HOME"/report.01.first from first to /home/papillon-rouge/report.01.first (2506 bytes, sha256 22a53940de290b208010e774ab5ec1c10812e0b707f865d4ca3c1790696afbc3).
(.pysnap) [papillon_rouge@localhost ~]$ pysnap report extract second report.01.second
Extracted "$HOME"/report.01.second from second to /home/papillon-rouge/report.01.second (2474 bytes, sha256 0b45ad605e04dc8571287ca6ea05e0d8770b32e9ad6e4e4a8eaf5f8e8154186a).
📍 2. C помощью команды pysnap report text <REPORT_Name> просмотрите записанный отчет.
(.pysnap) [papillon_rouge@localhost ~]$ pysnap report text report.01.first
[root@01-first ~]# ip a show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:da:00:dd brd ff:ff:ff:ff:ff:ff
altname enp0s8
altname enx080027da00dd
inet 10.9.0.1/24 scope global eth1
valid_lft forever preferred_lft forever
[root@01-first ~]# ping -c5 10.9.0.2
PING 10.9.0.2 (10.9.0.2) 56(84) bytes of data.
64 bytes from 10.9.0.2: icmp_seq=1 ttl=64 time=0.531 ms
64 bytes from 10.9.0.2: icmp_seq=2 ttl=64 time=0.635 ms
64 bytes from 10.9.0.2: icmp_seq=3 ttl=64 time=0.712 ms
64 bytes from 10.9.0.2: icmp_seq=4 ttl=64 time=0.558 ms
64 bytes from 10.9.0.2: icmp_seq=5 ttl=64 time=0.927 ms
--- 10.9.0.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4132ms
rtt min/avg/max/mdev = 0.531/0.672/0.927/0.142 ms
[root@01-first ~]#
exit
Самостоятельная работа
В качестве отчёта о проделанной лабораторной пришлите преподавателю два отчёта report.01.first и report.01.second с описанными в последнем разделе командами.