UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
4 open_pcap(void) 5 { 6 uint32_t localnet, netmask; 7 char cmd[MAXLINE], errbuf[PCAP_ERRBUF_SIZE], strl[INET_ADDRSTRLEN], 8 str2[INET_ADDRSTRLEN]; 9 struct bpf_program fcode;10 if (device == NULL) {11 if ((device = pcap_lookupdev(errbuf)) == NULL)12 err_quit("pcap_lookup: %s", errbuf);13 }14 printf("device = %sn", device);15 /* жестко задано; promisc=0, to_ms=500 */16 if ((pd = pcap_open_live(device, snaplen, 0, 500, errbuf)) == NULL)17 err_quit("pcap_open_live: %s", errbuf);18 if (pcap_lookupnet(device, &localnet, &netmask, errbuf) < 0)19 err_quit("pcap_lookupnet %s", errbuf);20 if (verbose)21 printf("localnet = %s, netmask = %sn",22 Inet_ntop(AF_INET, &localnet, str1, sizeof(str1)),23 Inet_ntop(AF_INET, &netmask. str2, sizeof(str2)));24 snprintf(cmd, sizeof(cmd), CMD,25 Sock_ntop_host(dest, destlen),26 ntohs(sock_get_port(dest, destlen)));27 if (verbose)28 printf("cmd = %sn", cmd);29 if (pcap_compile(pd, &fcode, cmd, 0, netmask) < 0)30 err_quit("pcap_compile: %s", pcap_geterr(pd));31 if (pcap_setfilter(pd, &fcode) < 0)32 err_quit("pcap_setfilter: %s", pcap_geterr(pd));33 if ((datalink = pcap_datalink(pd)) < 0)34 err_quit("pcap_datalink: %s", pcap_geterr(pd));35 if (verbose)36 printf("datalink = %dn", datalink);37 }10-14-ipcap_lookupdevSIOCGIFCONFioctlpcappcap_lookupdev15-17pcap_open_liveliveshaplenЕсли установлен флаг смешанного режима, интерфейс переходит в этот режим, в результате чего он принимает все пакеты, проходящие по кабелю. Это обычное состояние программы
tcpdumpЧетвертый аргумент — время ожидания при считывании. Вместо того чтобы возвращать пакет процессу каждый раз, когда приходит очередной пакет (что может быть весьма неэффективно, так как в этом случае потребуется выполнять множество операций копирования отдельных пакетов из ядра в процесс), это делается, когда считывающий буфер устройства оказывается заполненным либо когда истекает время ожидания. Если время ожидания при считывании равно нулю, то каждый пакет будет переправляться процессу, как только будет получен.
18-23pcap_lookupnetpcap_compile24-30pcap_compilecmdfcode31-32pcap_setfilter33-36pcap_datalinkПосле вызова функции
open_pcaptest_udp
