Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информационные сети и коммуникации. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

2.РАЗРАБОТКА СЕТЕВОГО ПРИЛОЖЕНИЯ

СИСПОЛЬЗОВАНИЕМ ВСТРОЕННОГО КОМАНДНОГО ЯЗЫКА SHELL

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Работа выполняется в среде операционной системы OС Линукс. Навыки программирования на языках командной оболочки оказываются весьма полезны при администрировании функций операционной системы. Если заглянуть в каталог управляющих программ сетевого стека TCP-IP и других сетевых компонент, то можно заметить, что немалая часть автоматизации таких процедур реализована именно с помощью языка сценариев Shell. Язык сценариев легок в изучении, в нем не так много специфических операторов и конструкций (их также называют встроенными), а большую часть своей функциональности он приобретает за счет вызова внешних команд операционной системы. В качестве внешней команды можно использовать и собственное приложение, написанное и откомпилированное, например, на языке Cи. Главное условие – приложение должно присваивать код возврата (return N в функции int main() ), так чтобы его можно было использовать в командах ветвления. Обычно приложения возвращают всего два кода возврата – 0 или 1 (что соответственно False или True). Синтаксис языка достаточно прост и прямолинеен, он почти полностью повторяет команды, которые приходится вводить в командной строке при администрировании функций системы, в том числе сетевых. Скрипты Shell возвращают нас к классической философии UNIX – разделение сложных задач на небольшие независимые компоненты. Язык Shell оказывается весьма удобен для встраиваемых или минималистических версий Линукс, с которыми особо часто приходится встречаться во множестве сетевого, системного оборудования, а также интеллектуальных контроллеров. Наиболее удобное применение, таким образом, лежит в области создания процедур автоматизации различных процессов, в том числе в области обмена данными. Однако следует помнить, что язык Shell, несмотря на то что он обладает всеми признаками языков программирования, такими как циклы (for, while и другие),

11

ветвления (включая case) и подпрограмм (допускается рекурсивный вызов функций), неприемлем для ресурсоемких задач и задач, связанных с применением математики и сложных алгоритмов.

Кроме того, язык не является кросс-платформенным (хотя при желании его можно исполнять и на Windows).

Его также сложно применять для приложений, требующих многомерных или специально структурированных массивов и проприетарных (закрытых) программ, так как скрипт представляет собой простой набор команд, записанный открытым текстом.

Все файлы и Shell script необходимо создавать в домашнем каталоге пользователя. Пример Shell скрипта смотрите в приложении.

Для реализации задачи, выполняемой скриптом, создавайте программный канал между сетевой командой (ping, traceroute, netstat, tcpdump, arp) и командой-фильтром grep; результат направляйте ко- манде-счетчику wc:

ping [адрес] | grep “подстрока” | wc –ключ,

или используйте код возврата :if[$? -eq 0]; then…

В качестве строки поиска для команды-фильтра grep указывайте строку, которая гарантированно присутствует в успешном ответе и отсутствует в сообщении об ошибке. Например, для команды ping такая строка может быть «reply».

Об успешности выполнения команды можно судить по количеству символов в ответе, который вернет wc: если успешно – результат больше нуля, если нет, то равен нулю.

Запуская в Shell-скрипте сетевую команду ping, tcpdump, задавайте ключ – <c N>, где N – желаемое количество обработанных пакетов. В противном случае команда будет выполняться непрерывно.

Процесс недоступности сетевого адреса (отсутствия сетевого трафика на интерфейсе) можно смоделировать путем отсоединения разъема сетевого кабеля RJ45 от сетевой карты.

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

Для работы с сокетами из командной строки рекомендуется использовать команды nc(netcat), ss.

12

Успешность некоторых команд можно проверить по их коду возврата в переменной $?

ПРАКТИЧЕСКАЯ РАБОТА

1.Ознакомиться с командой манипуляции сетевыми интерфейсами ifconfig, ip.

2.Активировать сетевой интерфейс с адресом в соответствии с вариантом задания.

3.Активировать логический интерфейс (ifconfig eth0:1) с адресом

всоответствии с вариантом задания.

4.Изучить команду настройки таблицы маршрутов route, настроить таблицу маршрутов в соответствии с вариантом задания.

5.Изучить команду протоколирования потока данных через сетевой интерфейс tcpdump (tcpdump –i интерфейс).

6.Изучить команду пакетного локатора ping. Выполнить ping между этими двумя интерфейсами (ping-адрес).

7.Сохранить в файл dump.rep поток данных через сетевой интерфейс при выполнении команды ping.

8.Выполнить ping маршрутизатора по умолчанию, результат сохранить в файле gateping.rep.

9.Вывести таблицу ARP. Удалить все записи из таблицы ARP. Выполнить ping маршрутизаторов, соседних компьютеров. Вывести таблицу ARP. Сохранить таблицу ARP в файле arp.rep.

10.Изучить команду трассировки traceroute. Сохранить путь пакета до адреса хоста, указанного в варианте заданий в файле trace.dmp.

11.Написать Shell скрипт, выполняющий действия согласно вари-

анту.

ВАРИАНТЫ ЗАДАНИЙ

Вариант 1

Написать Shell скрипт, выполняющий проверку:

наличия в системе своей запущенной копии, и принять решение

опродолжении работы;

наличия и количества сетевых интерфейсов в системе, и принять решение о продолжении работы;

13

активности сетевого интерфейса (факт подключения его к конкретному сетевому окружению;

возможности доступа с вашего IP-адреса в локальную сеть, и выдать сообщение;

возможности доступа с вашего IP-адреса в сеть Интернет по протоколу http, и выдать сообщение.

В цикле раз в минуту выполнить ping адреса 192.168.1.1, если ping не проходит, сообщить в файл протокола (echo ‘message’>> logfile.rep

ина терминал tty6). Изменить шлюз по умолчанию на 192.168.1.2 и завершить работу.

Вариант 2

Написать скрипт, выполняющий проверку:

наличия в системе своей запущенной копии, и принять решение о продолжении работы;

наличия и количества сетевых интерфейсов в системе, и принять решение о продолжении работы;

активности сетевого интерфейса (факт подключения его к корректному сетевому окружению);

возможности доступа с вашего IP-адреса в локальную сеть, и выдать сообщение;

возможности доступа с вашего IP-адреса в сеть Интернет по протоколу http, и выдать сообщение.

В цикле раз в минуту перехватывать 10 пакетов из интерфейса eth0 (tcpdump). Если среди перехваченных пакетов нет адресованных или полученных с адреса 192.168.1.2, вывести содержание таблицы ARP в лог-файл и завершить работу.

Вариант 3

Написать скрипт, выполняющий проверку:

наличия в системе своей запущенной копии, и принять решение о продолжении работы;

наличия и количества сетевых интерфейсов в системе, и принять решение о продолжении работы;

активности сетевого интерфейса (факт подключения его к корректному сетевому окружению);

возможности доступа с вашего IP-адреса в локальную сеть, и выдать сообщение;

14

возможности доступа с вашего IP-адреса в сеть Интернет по протоколу http, и выдать сообщение.

В цикле раз в минуту перехватывать 10 пакетов из интерфейса eth0 (tcpdump). Если в перехваченных пакетах есть адресованные или полученные с адреса 192.168.1.2, вывести содержание таблицы ARP в логфайл и завершить работу.

Вариант 4

Написать Shell скрипт, выполняющий проверку:

наличия в системе своей запущенной копии, и принять решение

опродолжении работы;

наличия и количества сетевых интерфейсов в системе, и принять решение о продолжении работы;

активности сетевого интерфейса (факт подключения его к корректному сетевому окружению);

возможности доступа с вашего IP-адреса в локальную сеть, и выдать сообщение;

возможности доступа с вашего IP-адреса в сеть Интернет по протоколу http, и выдать сообщение.

В цикле раз в минуту проверять содержание таблицы маршрутизации. Если в таблице не обнаружен адрес 192.168.1.1, сообщить в лог-файл

(echo ‘message’>> flogfile.rep и на терминал tty6), изменить шлюз по умолчанию на 192.168.1.2 и завершить работу.

Вариант 5

Написать Shell скрипт, выполняющий проверку:

наличия в системе своей запущенной копии, и принять решение

опродолжении работы;

наличия и количества сетевых интерфейсов в системе, и принять решение о продолжении работы;

активности сетевого интерфейса (факт подключения его к конкретному сетевому окружению);

возможности доступа с вашего IP-адреса в локальную сеть, и выдать сообщение;

возможности доступа с вашего IP-адреса в сеть Интернет по протоколу http, и выдать сообщение.

В цикле раз в минуту проверять содержание таблицы маршрутизации. Если в таблице обнаружен адрес 192.168.1.1, сообщить в лог-файл

15

(echo ‘message’>> flogfile.rep и на терминал tty6), изменить шлюз по умолчанию на 192.168.1.2 и завершить работу.

Вариант 6

Написать Shell скрипт, выполняющий проверку:

наличия в системе своей запущенной копии, и принять решение

опродолжении работы;

наличия и количества сетевых интерфейсов в системе, и принять решение о продолжении работы;

активности сетевого интерфейса (факт подключения его к корректному сетевому окружению);

возможности доступа с вашего IP-адреса в локальную сеть, и выдать сообщение;

возможности доступа с вашего IP-адреса в сеть Интернет по протоколу http, и выдать сообщение.

В цикле раз в 30 секунд проверять таблицу маршрутизации. Если в таблице есть запись для 192.168.1.100 (echo ‘message’>> flogfile.rep и

на терминал tty6), изменить шлюз по умолчанию на 192.168.1.2 и завершить работу.

Вариант 7

Написать Shell скрипт, выполняющий проверку:

наличия в системе своей запущенной копии, и принять решение

опродолжении работы;

наличия и количества сетевых интерфейсов в системе, и принять решение о продолжении работы;

активности сетевого интерфейса (факт подключения его к корректному сетевому окружению);

возможности доступа с вашего IP-адреса в локальную сеть, и выдать сообщение;

возможности доступа с вашего IP-адреса в сеть Интернет по протоколу http, и выдать сообщение (рекомендуется использовать команду netcat, ss).

В цикле раз в 30 секунд проверять таблицу маршрутизации. Если в таблице нет записи для 192.168.1.1 (echo ‘message’>> flogfile.rep и на терминал tty6), изменить шлюз по умолчанию на 192.168.1.2 и завершить работу.

16

Для выполнения работы потребуется любая версия операционной системы Линукс. Автор настоящего пособия рекомендует использовать для этой цели версию Ubuntu с длительным сроком поддержки. Специальных требований к программному обеспечению на компьютерах студентов и преподавателя не выдвигается (предполагается, что пакеты уже установлены).

КОНТРОЛЬНЫЕ ВОПРОСЫ

1.Виды циклов при создании скриптов на встроенных командных языках.

2.Методы взаимодействия с сетевыми командами.

3.Алгоритмические приемы ветвления программы.

4.Использование стандартных переменных окружения при создании программ на скриптовых языках.

17

3.КОНСОЛЬНЫЕ СЕТЕВЫЕ УТИЛИТЫ

ВСЕТЯХ IPv4 И IPv6

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Сети IPv6

IPv6 – новая версия протокола IP, предназначенная для решения проблемы с нехваткой сетевых адресов в адресном пространстве IPv4 за счет 32-битной длины адреса и ограничений, связанных с разбиением ее на подсети. Перевод на шестую версию протокола начал осуществляться внутри Google в 2008 году, и 6 июня 2012 года состоялся всемирный запуск сети IPv6. В настоящее время протокол IPv6 используется в нескольких тысячах сетей по всему миру. Даже в российском сегменте, где пока еще доля трафика шестого протокола относительно невелика, такие гиганты IT-индустрии, как Яндекс, Google и популярные социальные сети, уже предоставляют свои услуги как в старом (v4) так и новом (v6) адресном пространстве. Сети IPv6 доступны также в настоящее время у большинства провайдеров Интернета. С течением времени доля трафика v6 будет только возрастать, особенно по мере вывода из эксплуатации устаревшего оборудования, поддерживающего только сети IPv4.

Адрес в сети IPv6 состоит из 128 разрядов, и запись такого адреса выглядит не слишком удобной для восприятия. Обычно при записи IPv6-адреса принято разделять его двоеточиями на блоки по 32 бита (четыре шестнадцатеричных символа). Таким образом, если записать некоторый адрес в полной его форме, то он может выглядеть так:

31DA:00D3:0000:2F00:02AA:00FF:FE28:9C5A

Правило № 1. При записи IPv6-адресов допускается опускать все ведущие нули в шестнадцатеричной записи. Например,

00D3 можно представить как D3;00FF можно представить как FF. Важно, что это правило не распространяется на последующие нули.

Таким образом:

00D3 D3 = верно;

2F00 2F = НЕ ВЕРНО.

Таким образом, адрес интерфейса внутренней петли

0000:0000:0000:0000:0000:0000:0000:0001 может быть сокращен до 0:0:0:0:0:0:0:1.

18

Правило № 2. Двойное двоеточие (::). Некоторые типы адресов содержат длинные последовательности нулей. Для дальнейшего упрощения адресов IPv6 сплошные последовательности 16-битных блоков из нулей (0) в двухточечно-шестнадцатеричном формате могут быть сокращены до :: (так называемое двойное двоеточие). Так, адрес интерфейса внутренней петли может быть сокращен до записи ::1, а адрес fe80 : 0: 0 : 0 : 96de : 80ff : fece : f8a7 может быть сокращен до fe80 :: 96de: 80ff: fece: f8a7.

Чтобы определить число нулей, представленных как ::, можно сосчитать число блоков в сокращенном адресе, вычесть это число из 8, а полученную разность умножить на 16. Например, в адресе FF02::2 блоков два (блок FF02 и блок 2).

Сокращение нулей в адресе можно использовать только один раз. В противном случае будет невозможно определить число нулей, представленных каждым двойным двоеточием (::).

Префиксы в IPv6. Префикс – это часть адреса, указывающая биты, имеющие фиксированные значения, или биты идентификатора сети. Префиксы для маршрутов IPv6 и идентификаторов подсети выражаются так же, как в нотации CIDR (Classless Inter-Domain Routing) для IPv4.

Префикс IPv6 записывается в нотации адрес/длина_префикса. Напри-

мер, 21DA:D3::/48 – это префикс маршрута, а 21DA:D3:0:2F3B::/64 –

префикс подсети.

Префикс условно заменяет то, что раньше в IPV4 называлось маской. В реализациях IPv4 широко используется точечно-десятичное представление префикса сети, известное как маска подсети. В IPv6 маска подсети не используется. Поддерживается только нотация префикс/длина.

Автоконфигурация (Stateless address autoconfiguration – SLAAC).

При инициализации сетевого интерфейса ему назначается локальный IPv6-адрес, который автоматически генерируется на базе MAC-адреса. Таким образом, автоматически назначенный адрес будет состоять из префикса fe80::/10 и идентификатора, полученного на основе MAC-адреса интерфейса, размещенного в младшей части адреса.

Локальный адрес действителен только в пределах сетевого сегмента канального уровня и используется в основном для обмена информационными ICMPv6 пакетами.

19

Альтернативная форма адреса. Альтернативной формой записи, которая более удобна при работе с IPv4 и IPv6, является x:x:x:x:x:x:d.d.d.d, где 'x' – шестнадцатеричные 16-битные коды адреса, а 'd' – десятичные 8-битные, составляющие младшую часть адреса (стандартное IPv4 представление). Например:

0:0:0:0:0:0:13.1.68.30:0:0:0:0:FFFF:129.144.52.38,

или в сжатом виде:

::13.1.68.3::FFFF:129.144.52.38

Представление типа адреса. Специфический тип IPv6 адресов идентифицируется лидирующими битами адреса. Поле переменной длины, содержащее эти лидирующие биты, называется префиксом формата (Format Prefix – FP). Так, локальный адрес «персональный адрес хоста» в формате IPv6 имеет жестко определенный префикс: FC00::/7. Другие примеры адресов приведены в таблице.

Префиксы IPV6

Тип

Префикс

Нотация

Использование

адреса

(двоичный)

IPv6

 

 

 

 

 

Вложенный

00…1111 1111

::FFFF/96

Префикс для IPv4-адресов,

IPv4-адрес

1111 1111

 

вложенных в IPv6-адреса

 

(96 бит)

 

 

Обратная

00…1

::1/128

Адрес обратной связи для

связь

(128 бит)

 

каждого интерфейса [RFC

 

 

 

2460]

Глобальный

01 – 1111 1100

4000::/2 –

Глобальный уникастный

уникастный

0

FC00::/9

и эникастный (невыделенные)

Teredo

0010 0000 0000

2001:0000::/32

Teredo [RFC 4380]

 

0001 0000 0000

 

 

 

0000 0000

 

 

Немаршрути-

0010 0000 0000

2001:DB8::/32

Немаршрутизируемый.

зируемый

0001 0000 1101

 

Только для целей документи-

 

1011 1000

 

рования [RFC 3849]

6to4

0010 0000 0000

2002::/16

6to4 [RFC 3056]

 

0010

 

 

 

 

 

 

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]