Информационные сети и коммуникации. Учебное пособие
.pdf2.РАЗРАБОТКА СЕТЕВОГО ПРИЛОЖЕНИЯ
СИСПОЛЬЗОВАНИЕМ ВСТРОЕННОГО КОМАНДНОГО ЯЗЫКА 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
