Форум программистов, компьютерный форум CyberForum.ru

Увидеть все пакеты в сети. pcap - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ интерфейс для консольной программы http://www.cyberforum.ru/cpp-beginners/thread263441.html
А не подскажите, как в консольной проге менять шрифт текста или цвет фона и текста, или как создавать таблицы (если все это конечно возможно), и можно ли для консольной программы поставить свою иконку и если можно то как???
C++ Обход доски шахматным конем решал задачу "Тур конем". : На шахматной доске размером n*n на поле с координатами x0,y0 находится конь - фигура , перемещающаяся по шахматным правилам. Задача заключается в поиске последовательности ходов, при которых конь точно один раз побывает на всех полях доски. Проблема: Решить задачу самостоятельно не получилось, хоть она и считается классической (на рекурсии с возвратом).... http://www.cyberforum.ru/cpp-beginners/thread263412.html
Меню для программы C++
Подскажите пожалуйста как сделать в консольной программе на c++ главное меню вверху (файл, справка, об авторе и тд...)
C++ Массив
Подскажите пожалуйста как реализовать на С вот такой фрагмент: Если элемент встречается в массиве 3к раз(число кратное трем), то продолжать работу и когда находится элемент который встречается не кратное трем число раз - выводить его на экран заранне спасибо
C++ Уравнения! http://www.cyberforum.ru/cpp-beginners/thread263403.html
Подскажите как правильно написать эти уравнения? Вот всё что я осилил... X вместо а. void ysl1 (float X, float *tab) { tab = X * ((cos (X) + 14) / (sin (X) + 7)); }
C++ Точка на плоскости. !!!!!!!!!!!!!!!!!!!!!!!!!!! подробнее

Показать сообщение отдельно
masterbloger
1 / 1 / 0
Регистрация: 24.11.2010
Сообщений: 20
24.03.2011, 18:46     Увидеть все пакеты в сети. pcap
Здравствуйте!
У меня такая проблема.
Написал программу, которая с помощью pcap ловит пакеты в локальной сети и анализирует их содержимое.
Вот её код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* prototype of the packet handler */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
int _tmain(int argc, _TCHAR* argv[])
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
if (pcap_findalldevs_ex(PCAP_SRC_IF_ST RING, NULL, &alldevs, errbuf) == -1)
//if (pcap_findalldevs_ex("rpcap://10.0.0.127:80", NULL, &alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}
for(d=alldevs; d; d=d->next)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
}
if(i==0)
{
printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
return -1;
}
printf("Enter the interface number (1-%d):",i);
scanf_s("%d", &inum);
 
if(inum < 1 || inum > i)
{
printf("\nInterface number out of range.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
if ( (adhandle= pcap_open(d->name, // name of the device
BUFSIZ, // portion of the packet to capture
1,
-1, // read timeout
NULL, // authentication on the remote machine
errbuf // error buffer
) ) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
pcap_freealldevs(alldevs);
return -1;
}
printf("\nlistening on %s...\n", d->description);
long netmask;
bpf_program fcode;
if (d->addresses != NULL)
netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
else
netmask=0xffffff;
 
if (pcap_compile(adhandle, &fcode, "", 1, netmask) < 0)
{
fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
 
if (pcap_setfilter(adhandle, &fcode) < 0)
{
fprintf(stderr,"\nError setting the filter.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
pcap_freealldevs(alldevs);
pcap_loop(adhandle, -1, packet_handler, NULL);
return 0;
}
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
ip_header *ih;
udp_header *uh;
u_int ip_len;
u_short sport,dport;
struct in_addr addr;
u8 buf[1024];
 
uprotos_ether_h *ether;
uprotos_ipv4_h *ip;
uprotos_tcpv4_h *tcp;
(VOID)(param);
ih = (ip_header *) (pkt_data + 14); //length of ethernet header
ip_len = (ih->ver_ihl & 0xf) * 4;
uh = (udp_header *) ((u_char*)ih + ip_len);
sport = ntohs( uh->sport );
dport = ntohs( uh->dport );
printf("%d.%d.%d.%d:%d -> %d.%d.%d.%d:%d\n",
ih->saddr.byte1,
ih->saddr.byte2,
ih->saddr.byte3,
ih->saddr.byte4,
sport,
ih->daddr.byte1,
ih->daddr.byte2,
ih->daddr.byte3,
ih->daddr.byte4,
dport);
memset(packetbuf,0,strlen(packetbuf ));
ether = (uprotos_ether_h*)pkt_data;
ip = (uprotos_ipv4_h*)(pkt_data+sizeof(u protos_ether_h));
tcp = (uprotos_tcpv4_h*)(pkt_data + 14 + (ip->header_len)*4);
 
dump_ex((u8*)pkt_data, 0, header->len, packetbuf+strlen(packetbuf), 0, 0);
printf("%s\n", packetbuf);
fo = fopen("log.txt","a");
fprintf( fo, "%d.%d.%d.%d:%d -> %d.%d.%d.%d:%d\n",
ih->saddr.byte1,
ih->saddr.byte2,
ih->saddr.byte3,
ih->saddr.byte4,
sport,
ih->daddr.byte1,
ih->daddr.byte2,
ih->daddr.byte3,
ih->daddr.byte4,
dport);
fclose(fo);
}
Компьютер подключен к сети через ip-телефон. Мне нужно видеть те пакеты, которые сервер направляет телефону, но моя программа их почему-то не видит.
Сразу скажу, что компьютер, телефон и сервер находятся в разных подсетях. НО…!
Запускаю WireShark и с её помощью вижу все нужные мне пакеты.
Насколько я знаю, WireShark работает на том же pcap.

В чём может быть проблема?
Советы о том, что WireShark бесплатный и все его коды открыты, давать не надо.
Спасибо за помощь!

Добавлено через 16 минут
Может есть какая возможность подключится, с помощью pcap, к сетевому интерфейсу ip-телефона и перехватывать пакеты адресованные ему?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru