Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

сниффинг и PPP

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> сниффинг и PPP
Имя
Сообщение << Старые топики   Новые топики >>
сниффинг и PPP - 2005-07-17 19:01:51   
troxa

Сообщений: 50
Оценки: 0
Присоединился: 2005-03-31 22:19:26
простенький снифер на winpcap
(winsock глючит):
#include <stdio.h>

#include <pcap.h>
#include <remote-ext.h>

#define fatal(x) {printf("%s\n",x); exit(-1);}

void packet_handler(u_char*, const struct pcap_pkthdr*, const u_char*);

void main(void){
pcap_if_t *alldevs, *d;
pcap_t *dev;
char errbuf[PCAP_ERRBUF_SIZE];
char filter[] = "";
u_int i, n;

if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING,0,&alldevs,errbuf)==-1)
fatal("pcap_findalldevs_ex failed\n");

for(d=alldevs,i=1; d; d=d->next,i++){
printf("%i %s\n", i, d->name);
if(d->deSсгiрtion) printf("%s\n",d->deSсгiрtion);
else printf("no deSсгiрtion available\n");
}
n=i-1;
printf("adapter: ");
scanf("%u",&i);
if ((i<1)||(i>n))
fatal("out of range");

for(d=alldevs; i!=1; d=d->next, i–);

if(!(dev = pcap_open(d->name, 65536, PCAP_OPENFLAG_PROMISCUOUS,1000,0,errbuf)))
fatal("pcap_open failed");

u_int netmask;
struct bpf_program fcode;

if(d->addresses)
netmask = ((sockaddr_in*) (d->addresses->netmask))->sin_addr.s_addr;
else netmask = 0xffffffff;

//compile the filter
printf("compiling the filter…\n");
if (pcap_compile(dev, &fcode, filter, 1, netmask) < 0)
{
fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
// Free the device list
pcap_freealldevs(alldevs);
return;
}

//set the filter
printf("setting the filter…\n");
if (pcap_setfilter(dev, &fcode) < 0)
{
fprintf(stderr,"\nError setting the filter.\n");
// Free the device list
pcap_freealldevs(alldevs);
return;
}

printf("listening on %s…\n",d->name);
pcap_freealldevs(alldevs);

pcap_loop(dev, 0, packet_handler, 0);
}

void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
struct tm *ltime;
char timestr[16];
u_int i;

ltime=localtime(&header->ts.tv_sec);
strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);

printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
for(i=0; i<header->caplen; i++) printf("%X ",pkt_data);<BR> printf(&quot;\n&quot;);<BR><BR>}<BR><BR><BR>проблема в следующем-<BR>я не вижу ppp фреймы(которые всегда начинаются с 7E FF 03)<BR>хотя подключаюсь через модем<BR><BR>если верить разработчикам winpcap<BR>то снифер получает пакеты с самого<BR>низкого уровня т е приходят даже не датаграммы(IP)<BR>а фреймы(PPP, Ethernet…)<BR><BR>вместо фреймов PPP я вижу набор байт<BR>похожих на фреймы Ethernet но очень странные<BR>в которых MAC адрес отправителя == MAC получателя<BR>(что за черт? какой MAC адрес при модемном соединении?)<BR><BR>самое интересное что в поле типа пакета(IP, ARP, RARP и т д)<BR>стоят константы для PPP т е<BR>0021 - IP датаграмма<BR>C021 - управляющая информация канала<BR>8021 - сетевая управляющая информация<BR><BR>windump (tcpdump для win использующий winpcap) показывает то же <BR>если использовать windump то фреймы<BR>он распознает как Ethernet и пишет<BR>unknown ethertype C021<BR>unknown ethertype 8021 и т д<BR><BR>работаю на winxp sp2<BR>че за хрень? где PPP фреймы?
Post #: 1
сниффинг и PPP - 2005-07-19 19:39:13   
troxa

Сообщений: 50
Оценки: 0
Присоединился: 2005-03-31 22:19:26
хм… никто не знает…

ну может хоть хороший снифер посоветуете?
или инфу по теме?[sm=em62.gif][sm=em62.gif][sm=em62.gif]
Post #: 2
Страниц:  [1]
Все форумы >> [Веб-программинг] >> сниффинг и PPP







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.