Вход/Регистрация
UNIX: разработка сетевых приложений
вернуться

Стивенс Уильям Ричард

Шрифт:

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;

  • Читать дальше
  • 1
  • ...
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: