Читаем UNIX: разработка сетевых приложений полностью

 5 #include netinet/ip.h

 6 #include netinet/ip_var.h

 7 #include netinet/udp.h

 8 #include netinet/udp_var.h

 9 #include net/if.h

10 #include netinet/if_ether.h

11 #define TTL_OUT 64 /* исходящее TTL */

12 /* объявление глобальных переменных */

13 extern struct sockaddr *dest, *local;

14 extern socklen_t destlen, locallen;

15 extern int datalink;

16 extern char *device;

17 extern pcap_t *pd;

18 extern int rawfd;

19 extern int snaplen;

20 extern int verbose;

21 extern int zerosum;

22 /* прототипы функций */

23 void cleanup(int);

24 char *next_pcap(int*);

25 void open_output(void);

26 void open_pcap(void);

27 void send_dns_query(void);

28 void test_udp(void);

29 void udp_write(char*, int);

30 struct udpiphdr *udp_read(void);

3-10 Для работы с полями заголовков IP и UDP требуются дополнительные заголовочные файлы Интернета.

11-30 Мы определяем некоторые глобальные переменные и прототипы для своих собственных функций, которые вскоре покажем.

Первая часть функции mainпоказана в листинге 29.2.

Листинг 29.2. Функция main: определения

//udpcksum/main.c

 1 #include "udpcksum.h"

 2 /* определение глобальных переменных */

 3 struct sockaddr *dest, *local;

 4 struct sockaddr_in locallookup;

 5 socklen_t destlen, locallen;

 6 int datalink; /* из pcap_datalink, файл net/bpf.h */

 7 char *device; /* устройство pcap */

 8 pcap_t *pd; /* указатель на структуру захваченных пакетов */

 9 int rawfd; /* символьный сокет */

10 int snaplen = 200; /* объем захваченных данных */

11 int verbose;

12 int zerosum; /* отправка UDP-запроса без контрольной суммы */

13 static void usage(const char*);

14 int

15 main(int argc, char *argv[])

16 {

17  int c, lopt=0;

18  char *ptr, localname[1024], *localport;

19  struct addrinfo *aip;

В следующей части функции main, представленной в листинге 29.3, обрабатываются аргументы командной строки.

Листинг 29.3. Функция main: обработка аргументов командной строки

//udpcksum/main.c

20  opterr = 0; /* отключаем запись сообщений getopt в stderr */

21  while ((с = getopt(argc, argv, "0i:l:v")) != -1) {

22   switch (с) {

23   case '0':

24    zerosum = 1;

25    break;

26   case 'i';

27    device = optarg; /* устройство pcap */

28    break;

29   case 'l'; /* локальный IP адрес и номер порта; a.b.c.d.p */

30    if ((ptr = strrchr(optarg, '.')) == NULL)

31     usage("invalid -l option");

32    *ptr++ = 0; /* нуль заменяет последнюю точку. */

33    local port = ptr; /* имя сервиса или номер порта */

34    strncpy(localname, optarg, sizeof(localname));

35    lopt = 1;

36    break;

37   case 'v':

38    verbose = 1;

39    break;

40   case '?':

41    usage("unrecognized option");

42   }

43  }

Обработка аргументов командной строки

20-25 Мы вызываем функцию getoptдля обработки аргументов командной строки. С помощью параметра -0мы посылаем запросы UDP без контрольной суммы UDP, чтобы выяснить, обрабатываются ли эти дейтаграммы сервером иначе, чем дейтаграммы с контрольной суммой.

Перейти на страницу:

Похожие книги

Основы программирования в Linux
Основы программирования в Linux

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым. Для начинающих Linux-программистов

Нейл Мэтью , Ричард Стоунс , Татьяна Коротяева

ОС и Сети / Программирование / Книги по IT
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT