Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
perror ( "SO_ATTACH_FILTER" );
close ( e0_r );
exit (1);
}
В приведенном примере есть один недостаток: исходные данные, такие как IP-адрес, номер порта, вводятся в текст программы. При необходимости изменения условий фильтрации придется каждый раз вносить изменения в исходный текст и перекомпилировать программу. Модифицируем программу фильтрации для возможности гибкой настройки фильтра на новое условие, например, на новый IP-адрес. IP-адрес будем вводить в командной строке (аргумент argv [1]). В массиве BPF_code третий элемент перепишем в виде:
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0, 0, 4),
В этой инструкции мы обнуляем поле, содержащее IP-адрес. Для хранения введенного IP-адреса нам потребуются дополнительные переменные:
union {
u_long net;
char point [4];
} addr;
В поле net объединения addr будет храниться введенный IP-адрес в сетевом формате. Заполним поле net:
addr. net = inet_addr (argv [1]);
Теперь необходимо зеркально перевернуть значение IP-адреса в сетевом формате. Сделаем это, поменяв местами 0-й и 3-й байты, 1-й и 2-й:
addr. point [0] ^= addr. point [3];
addr. point [3] ^= addr. point [1];
addr. point [0] ^= addr. point [3];
addr. point [1] ^= addr. point [2];
addr. point [2] ^= addr. point [1];
addr. point [1] ^= addr. point [2];
Заполним необходимое поле в массиве BPF_code:
BPF_code [3]. k = addr. net;
Таким образом, если мы введем адрес 192.168.1.2, поле BPF_code [3]. k будет содержать значение 0xC0A80102. Для контроля можно отобразить это значение:
printf( « %x «, BPF_code[3]. k );
После этого подключаем фильтр к сокету и работаем.
Использование tcpdump
Для упрощения задачи составления программы фильтрации можно воспользоваться утилитой tcpdump. Давайте рассмотрим, как это делается. Предположим, нам необходим пакетный фильтр, принимающий IP-пакеты, адресатом или отправителем которых является хост с IP-адресом 192.168.9.1. Вводим следующую команду:
tcpdump -dd host 192.168.9.1