В.3. Программа sock
В.3. Программа sock
Программа sock, написанная Уильямом Стивенсом, впервые появилась в книге [111], где широко использовалась для генерации специальных условий, большинство которых затем проверялось с помощью программы tcpdump. Удобство этой программы заключается в том, что она генерирует такое множество различных сценариев, что нет необходимости писать специальные тестовые программы.
В этой книге исходный код программы не приведен (более 2000 строк на языке С), но он находится в свободном доступе (см. предисловие).
Программа работает в одном из четырех режимов, и в каждом из них можно использовать либо протокол TCP, либо протокол UDP.
1. Клиент стандартного ввода и стандартного вывода (рис. В.1).
Рис. В.1. Клиент sock: стандартный ввод и стандартный вывод
В клиентском режиме все, что считывается из стандартного потока ввода, передается в сеть, а все, что получается из сети, записывается в стандартный поток вывода. Должны быть указаны IP-адрес сервера и номер порта, и в случае TCP выполняется активное открытие.
2. Сервер стандартного ввода и стандартного вывода. Этот режим аналогичен предыдущему, за исключением того, что программа связывает заранее известный порт со своим сокетом и в случае TCP осуществляется пассивное открытие.
3. Клиент-отправитель (рис. В.2).
Рис. В.2. Программа sock в качестве клиента-отправителя
Программа осуществляет фиксированное количество передач пакетов некоторого определенного размера в сеть.
4. Сервер-получатель (рис. В.3).
Рис. В.3. Программа sock в качестве сервера-получателя
Программа осуществляет фиксированное количество считываний из сети.
Эти четыре рабочих режима соответствуют следующим четырем командам:
sock [параметры] узел служба
sock [параметры] -s [узел] служба
sock [параметры] -i узел служба
sock [параметры] -is [узел] служба
где узел— это имя или IP-адрес узла, а служба — это имя или номер порта. В двух серверных режимах выполняется связывание с универсальным адресом, если не задан необязательный параметр узел.
Можно также определить около 40 параметров командной строки, запускающих дополнительные возможности программы. Здесь мы не будем подробно останавливаться на этих параметрах, отметим только, что можно использовать почти все параметры сокетов, упомянутые в главе 7. Запуск программы без аргументов выводит на экран краткое описание всех параметров:
-b n связывает n в качестве клиентского локального номера порта
-с конвертирует символ новой строки в CR/LF и наоборот
-f a.b.c.d.p удаленный IP-адрес = a.b.c.d, удаленный номер порта = р
-g a.b.c.d свободная маршрутизация
-h половинное закрытие TCP при получении EOF из стандартного потока ввода
-i отправка данных на сокет, прием данных с сокета (w/-s)
-j a.b.c.d присоединение к группе многоадресной передачи
-k осуществляет write или writev порциями
-l a.b.c.d.p клиентский локальный IP-адрес = a.b.c.d. локальный номер порта = р
-n n размер буфера для записи клиентом "рассылки" (по умолчанию 1024)
-о НЕ присоединять UDP-клиент
-р n время ожидания (в мс) перед каждым считыванием или записью (рассылка/прием)
-q n размер очереди на прослушиваемом сокете для сервера TCP
(по умолчанию 5)
-r n количество байтов за одну операцию считывания (read) для сервера "приема"
(по умолчанию 1024)
-s работает как сервер, а не как клиент
-u использовать UDP вместо TCP
-v подробный вывод
-w n количество байтов для каждой записи (write) клиента "рассылки"
(по умолчанию 1024)
-x n время (в ms) для SO_RCVTIMEO (получение тайм-аута)
-y n время (в ms) для SO_SNDTIMEO (отправка тайм-аута)
-A параметр SO_REUSEADDR
-B параметр SO_BROADCAST
-D параметр SO_DEBUG
-E параметр IP_RECVDSTADDR
-F порождение дочерних процессов (fork) после установления соединения
(параллельный TCP-сервер)
-G a.b.c.d жесткая маршрутизация
-H n параметр IP_TOS (16=min del, 8=max thru, 4=max rel, 2=min cost)
-I сигнал SIGIO
-J n параметр IP_TTL
-K параметр SO_KEEPALIVE
-L n параметр SO_LINGER, n = linger time
-N параметр TCP_NODELAY
-O n время (в мс) для ожидания после вызова listen, но перед первым приемом (accept)
-Р n время (в мс) перед первым считыванием или записью (рассылка/прием)
-Q n время (в мс) ожидания после получения FIN, но перед закрытием
-R n параметр SO_RCVBUF
-S n параметр SO_SNDBUF
-Т параметр SO_REUSEPORT
-U n войти в срочный режим, прежде чем записать число n (только для отправителя)
-V использовать writev() вместо write(): включает -k
-W игнорировать ошибки записи для клиента приема
-X n параметр TCP_MAXSEG (устанавливает MSS)
-Y параметр SO_DONTROUTE
-Z MSG_PEEK
-2 параметр IP_ONESBCAST (255.255.255.255) для широковещательной передачи
Данный текст является ознакомительным фрагментом.