"Tue Aug 19 23:35:10 2003
"
3211 daytimetcpcli RET write 26/0x1a
3211 daytimetcpcli CALL read(0x3,0x7fdffffe830,0x1000)
3211 daytimetcpcli GIO fd 3 read 0 bytes
""
3211 daytimetcpcli RET read 0
3211 daytimetcpcli CALL exit(0)
Число 3211 является идентификатором процесса. CALL
идентифицирует системный вызов, RET
обозначает возвращение управления, GIO
подразумевает общую операцию ввода-вывода. Мы видим системные вызовы socket
и connect
, за которыми следуют вызовы read
, возвращающие 26 байт. Наш клиент записывает эти байты в стандартный поток вывода, и при следующем вызове read
возвращает нулевое значение (конец файла).
Сокеты ядра Solaris 9
Операционная система Solaris 2.x основывается на SVR4, и во всех версиях ранее 2.6 сокеты реализуются так, как показано на рис. 31.3. Однако во всех версиях SVR4 с подобными реализациями сокетов существует одна проблема: они редко обеспечивают полную совместимость с сокетами Беркли-ядер. Для обеспечения дополнительной совместимости в Solaris 2.6 способ реализации изменен за счет использования файловой системы sockfs
. Такой подход обеспечивает поддержку сокетов ядра, что можно проверить с помощью программы truss
на нашем клиенте (использующем сокеты).
solaris % truss -v connect daytimetcpcli 127.0.0.1
Mon Sep 8 12:16:42 2003
После обычного подключения библиотеки осуществляется первый системный вызов so_socket
— системный вызов, инициированный нашим вызовом socket
.
so_socket(PF_INET, SOCK_STREAM, IPPROTO_IP, 1) = 3
connect(3, 0xFFBFDEF0, 16, 1) = 0
AF_INET name = 127.0.0.1 port = 13
read(3, " M o n S e p 8 1", ... 4096) = 26
Mon Sep 8 12:48:06 2003
write(1, " M o n S e p 8 1", ... 26) = 26
read(3, 0xFFBFDF03, 4096) = 0
_exit(0)
Первые три аргумента системного вызова so_socket
являются нашими аргументами socket
.
Далее мы видим, что connect
является системным вызовом, a truss
при вызове с флагом -v connect
выводит на экран содержимое структуры адреса сокета, на которую указывает второй аргумент (IP-адрес и номер порта). Мы не показываем системные вызовы, относящиеся к стандартным потокам ввода и вывода.
В.2. Стандартные службы Интернета
Рекомендуем ознакомиться со стандартными службами Интернета, приведенными в табл. 2.1. Для тестирования наших клиентов мы много раз использовали службу, позволяющую определить дату и время. Служба, игнорирующая присылаемые данные, является удобным портом, на который можно отправлять данные. Эхо-служба аналогична эхо-серверу, неоднократно упоминаемому в этой книге.
В настоящее время многие сайты перекрывают доступ к этим службам с помощью брандмауэров, так как некоторые атаки типа «отказ в обслуживании» (DoS), имевшие место в 1996 году, были направлены именно на эти службы (см. упражнение 13.3). Тем не менее можно успешно использовать эти службы внутри локальной сети.
В.3. Программа sock
Программа sock
, написанная Уильямом Стивенсом, впервые появилась в книге [111], где широко использовалась для генерации специальных условий, большинство которых затем проверялось с помощью программы tcpdump
. Удобство этой программы заключается в том, что она генерирует такое множество различных сценариев, что нет необходимости писать специальные тестовые программы.
В этой книге исходный код программы не приведен (более 2000 строк на языке С), но он находится в свободном доступе (см. предисловие).
Программа работает в одном из четырех режимов, и в каждом из них можно использовать либо протокол TCP, либо протокол UDP.
1. Клиент стандартного ввода и стандартного вывода (рис. В.1).
Рис. В.1. Клиент sock: стандартный ввод и стандартный вывод
В клиентском режиме все, что считывается из стандартного потока ввода, передается в сеть, а все, что получается из сети, записывается в стандартный поток вывода. Должны быть указаны IP-адрес сервера и номер порта, и в случае TCP выполняется активное открытие.
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии