0 / 0 / 0
Регистрация: 31.05.2016
Сообщений: 2
1

анализ DNS

31.05.2016, 20:14. Показов 710. Ответов 1
Метки нет (Все метки)

Как модернизировать программу анализ DNS-зaпpoсы, по DNS-oтвeты? не могу разобраться в каком месте это изменить

#define _BSD_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <netinet/ip.h>
#include <netinet/udp.h>
#include <string.h>
#include <netinet/if_ether.h>
#include <pcap.h>

// ethernet заголовок
struct sniff_ethernet {
u_char ether_dhost[ETHER_ADDR_LEN]; /* Destination host address */
u_char ether_shost[ETHER_ADDR_LEN]; /* Source host address */
u_short ether_type; /* IP? ARP? RARP? etc */
};

// IP-заголовок
struct sniff_ip {
#if BYTE_ORDER == LITTLE_ENDIAN
u_int ip_hl:4, /* header length */
ip_v:4; /* version */
#endif
#if BYTE_ORDER == BIG_ENDIAN
u_int ip_v:4, /* version */
ip_hl:4; /* header length */
#endif /* not _IP_VHL */
u_char ip_tos; /* type of service */
u_short ip_len; /* total length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* checksum */
struct in_addr ip_src,ip_dst; /* source and dest address */
};

// UDP заголовок
struct sniff_udp {
u_short th_sport; /* source port */
u_short th_dport; /* destination port */
};

void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
const struct sniff_ethernet *ethernet; // The ethernet header
const struct sniff_ip *ip; // The IP header
const struct sniff_udp *udp; // The UDP header
const char *payload; // Packet payload

static int number=0; //Порядковый номер перехваченного пакета (DNS-запроса)

int size_ethernet = sizeof(struct sniff_ethernet);
int size_ip = sizeof(struct sniff_ip);
int size_udp = sizeof(struct sniff_udp);

ethernet = (struct sniff_ethernet*)(packet);
ip = (struct sniff_ip*)(packet + size_ethernet);
udp = (struct sniff_udp*)(packet + size_ethernet + size_ip);
payload = (u_char *)(packet + size_ethernet + size_ip + size_udp);

number++;
printf("%i", number); // порядковый номер
printf("\t%s", inet_ntoa(ip->ip_src)); // IP источника
printf("\t%d", ntohs(udp->th_sport)); // номер порта источника
printf("\t%s", inet_ntoa(ip->ip_dst)); // IP назначения
printf("\t%d", ntohs(udp->th_dport)); // номер порта назначения
printf("\t%d\n", header->ts); // временная метка

};

int main()
{
pcap_t *handle; // дескриптор сессии
char *dev;
char errbuf[PCAP_ERRBUF_SIZE]; // строка с описанием ошибки
struct pcap_pkthdr header; // заголовок пакета, который заполнит pcap
struct bpf_program filter; // скомпилированное выражение для фильтра
char filter_app[] = "udp dst port 53"; // выражение для фильтра -- UDP-пакеты, порт назначения = 53
bpf_u_int32 mask; // сетевая маска нашего интерфейса
bpf_u_int32 net; // IP-адрес нашего интерфейса

dev = pcap_lookupdev(errbuf); // определяем интерфейс, который будет прослушиваться
pcap_lookupnet(dev, &net, &mask, errbuf); // получаем сетевой адрес и маску интерфейса
printf("Device: %s\n", dev);
printf("№\tSource\t\tsPort\tDestinaion\tdPort\tTimeStamp\n") ;
handle = pcap_open_live(dev, BUFSIZ, 1, 0, errbuf); // открываем сессию перехвата в promiscuous режиме
pcap_compile(handle, &filter, filter_app, 0, net); // компилируем и применяем пакетный фильтр
pcap_setfilter(handle, &filter);
pcap_loop(handle, 150, got_packet, NULL); // перехватываем пакеты
pcap_close(handle); //закрываем сессию

return(0);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2016, 20:14
Ответы с готовыми решениями:

Нагрузка на DNS сервер. DNS на Windows Server. Мощности оборудования для больших DNS серверов
Приветствую коллеги! Интересно ваше узнать ваше мнение (а может быть у вас есть практика) какие...

Перенаправление DNS запросов из локальной сети к DNS серверу провайдера
Добрый день! Необходимо настроить простейший инет шлюз на freebsd и PF. Может кто сможет...

DNS стали глючить игры на ноуте DNS Nvidia gt 540m,6 гб оперативки,2.5 ггц
стали глючить игры на ноуте DNS Nvidia gt 540m,6 гб оперативки,2.5 ггц,раньше даже гта 4 без глюков...

Возможно ли репликация с DNS Windows на DNS Ubuntu?
Ситуация такая, сейчас построена локальная сеть фирмы на Windows, в по выкинули кучу денег. Стоит 1...

1
1122 / 873 / 344
Регистрация: 02.09.2012
Сообщений: 2,672
31.05.2016, 23:43 2
Может фильтр заменить udp dst port 53 на udp src port 53
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2016, 23:43
Помогаю со студенческими работами здесь

Сравнение DNS сервера MS Windows DNS и BIND
Доброго времени суток. Прошу помощи в выборе правильных критериев в сравнении ПО. Сравниваются DNS...

Добавление DNS имени на DNS сервер
Добрый день! у меня в наличии есть 2 домен контроллера с днс серверами соответственно. Я хочу...

Как можно продиагностировать DNS запросы, включая обращения к кэшу, и сами запросы от DNS клиента к серверу?
Добрый день! Подскажите пожалуйста, каким образом можно в операционной системе MS Windows 7...

Анализ ценных бумаг (построить Гистограмму и провести анализ)
Здравствуйте! Помогите пожалуйста разобраться с заданием. Для исходных данных нужно определить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru