winpcap 3.01a VS winpcap 3.1b
От: consumer  
Дата: 16.12.04 22:25
Оценка:
имеется сервак локальной сети с модемным выходом в инет. Необходимо считать трафик, который идёт из/в инета на каждую тачку этой локалки. Использовал 3.01a. Внутренний трафик сети считался не полностью, модемный трафик вообще не видел. Использовал 3.1b Модемный трафик считается абсолютно точно, а трафик локалки на нуле. В чём проблема не пойму, и как это отладить неясно. Кто-нибудь знает выход?
Re: winpcap 3.01a VS winpcap 3.1b
От: Аноним  
Дата: 17.12.04 09:35
Оценка:
Здравствуйте, consumer, Вы писали:

C>имеется сервак локальной сети с модемным выходом в инет. Необходимо считать трафик, который идёт из/в инета на каждую тачку этой локалки. Использовал 3.01a. Внутренний трафик сети считался не полностью, модемный трафик вообще не видел. Использовал 3.1b Модемный трафик считается абсолютно точно, а трафик локалки на нуле. В чём проблема не пойму, и как это отладить неясно. Кто-нибудь знает выход?


покажи выражение фильтра
Re[2]: winpcap 3.01a VS winpcap 3.1b
От: consumer  
Дата: 18.12.04 17:13
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, consumer, Вы писали:


C>>имеется сервак локальной сети с модемным выходом в инет. Необходимо считать трафик, который идёт из/в инета на каждую тачку этой локалки. Использовал 3.01a. Внутренний трафик сети считался не полностью, модемный трафик вообще не видел. Использовал 3.1b Модемный трафик считается абсолютно точно, а трафик локалки на нуле. В чём проблема не пойму, и как это отладить неясно. Кто-нибудь знает выход?


А>покажи выражение фильтра




перед этим прочитаны интерфейсы pcap_findalldevs
Определяет два интерфейса:
Generic NdisWan Adapter
и (если модем врублен) WAN (PPP/SLIP) Interface
Так вот, трафик по моедму считается нормально. А если слушать интерфейс Generic NdisWAn (я так понял это интерфейс объединающий все сетевые адаптеры на компе, потому что у меня две сетевухи), то трафик считается в несколько раз меньший.

//open device
if(!dev)
throw 0;
if(!(devhandle = pcap_open_live(dev->name, 65536, 0, 100, errbuf)))
throw 0;

//Check adapters' link layer (must be Ethernet)
if (pcap_datalink(devhandle) != DLT_EN10MB)
throw 0;

//check address list of the interface
if (!dev->addresses)
netmask = ((struct sockaddr_in *)(dev->addresses->netmask))->sin_addr.S_un.S_addr;

//get ip-addresses of interface
int ipi_cnt = 0;
/////////////////////////////////////
//тут заполняется массив IP-адресов, той тачки, которую нужно слушать. Это всё правильно делается (проверял).
u_long int_ip_array[MAX_IP_ADDRESSES];
hostent *hent = gethostbyname(cntr->GetHostName());

if(hent->h_addrtype != 0)
throw 0;

for(int i = 0; i < hent->h_length; i ++)
if(i < MAX_IP_ADDRESSES)
{
int_ip_array[i] = stoip(hent->h_addr_list[i]);
ipi_cnt++;
}

if(!ipi_cnt)
throw 0;
/////////////////////////////////////

//create, compile and setup packet filter
здесь я пробовал фильтр либо пустая строка "", либо "ip". не влияет на счёт.
cntr->CreatePacketFilter(packet_filter);
if (pcap_compile(devhandle, &fcode, packet_filter.c_str(), 1, netmask) < 0)
throw 0;
if (pcap_setfilter(devhandle, &fcode) < 0)
throw 0;
/* Put the interface in statstics mode */
//здесь MODE_STAT ничего абсолютно не считает.
pcap_setmode(devhandle, MODE_CAPT);

//.... тут не важно что

// capture pockets loop
while (true)
{
switch(pcap_next_ex(devhandle, &pkt_header, &pkt_data))
{
case 1: // packet has been read without problems

//тут анализ пакета...

как определить все ли пакеты считаются непонятно. В отладчике я ведь не могу считать все сотни пакетов. Пакеты ловятся, но не все. При копировании по сети 100 мегов, считается только десять или около того.


break;

case 0: // timeout set with pcap_open_live() has elapsed
break;

case -1: // error occurred
case -2: // EOF was reached reading from an offline capture
throw 0;
}//switch

}//while
Re[3]: winpcap 3.01a VS winpcap 3.1b
От: NeuroVirus Россия  
Дата: 20.12.04 07:50
Оценка:
Здравствуйте, consumer, Вы писали:

C>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, consumer, Вы писали:


C>>>имеется сервак локальной сети с модемным выходом в инет. Необходимо считать трафик, который идёт из/в инета на каждую тачку этой локалки. Использовал 3.01a. Внутренний трафик сети считался не полностью, модемный трафик вообще не видел. Использовал 3.1b Модемный трафик считается абсолютно точно, а трафик локалки на нуле. В чём проблема не пойму, и как это отладить неясно. Кто-нибудь знает выход?


А>>покажи выражение фильтра




C>перед этим прочитаны интерфейсы pcap_findalldevs

C>Определяет два интерфейса:
C>Generic NdisWan Adapter
C>и (если модем врублен) WAN (PPP/SLIP) Interface
C>Так вот, трафик по моедму считается нормально. А если слушать интерфейс Generic NdisWAn (я так понял это интерфейс объединающий все сетевые адаптеры на компе, потому что у меня две сетевухи), то трафик считается в несколько раз меньший.

Ну не знаю, должно быть на каждый интерфейс по записи.
Я, правда, пользую не pcap_* а низкоуровневые вызовы,
вот мой пример на паскакале:

function GetAdapterNames(L: TStrings): boolean;
var az, w, ss: string;
    qz, k, ki: dword;
begin
  Result := PacketDriverLoaded;
  if not Result then Exit;
  qz := 8192; SetLength(az, qz);
  Result := PacketGetAdapterNames(@az[1], qz);
  if not Result then Exit;
  SetLength(az, qz);
  { enumerate adapter system ANSI names }
  if (Win32Platform = VER_PLATFORM_WIN32_NT) then begin
    ki := 2; ss := #0#0;
  end else begin
    ki := 0; ss := #0;
  end;
  k := Pos(ss, az);
  while (k > 0) do begin
    w := Copy(az, 1, k - 1);
    Delete(az, 1, k + ki);
    if (w = EmptyStr) then Break;
    if (ki <> 0) then w := WideCharToString(@w[1]);
    if Assigned(L) then L.Add(w);
    k := Pos(ss, az);
  end;
end;
Re[4]: winpcap 3.01a VS winpcap 3.1b
От: consumer  
Дата: 20.12.04 19:52
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

NV>Здравствуйте, consumer, Вы писали:


C>>Здравствуйте, Аноним, Вы писали:


А>>>Здравствуйте, consumer, Вы писали:


C>>>>имеется сервак локальной сети с модемным выходом в инет. Необходимо считать трафик, который идёт из/в инета на каждую тачку этой локалки. Использовал 3.01a. Внутренний трафик сети считался не полностью, модемный трафик вообще не видел. Использовал 3.1b Модемный трафик считается абсолютно точно, а трафик локалки на нуле. В чём проблема не пойму, и как это отладить неясно. Кто-нибудь знает выход?


А>>>покажи выражение фильтра




C>>перед этим прочитаны интерфейсы pcap_findalldevs

C>>Определяет два интерфейса:
C>>Generic NdisWan Adapter
C>>и (если модем врублен) WAN (PPP/SLIP) Interface
C>>Так вот, трафик по моедму считается нормально. А если слушать интерфейс Generic NdisWAn (я так понял это интерфейс объединающий все сетевые адаптеры на компе, потому что у меня две сетевухи), то трафик считается в несколько раз меньший.

NV>Ну не знаю, должно быть на каждый интерфейс по записи.

NV>Я, правда, пользую не pcap_* а низкоуровневые вызовы,
NV>вот мой пример на паскакале:

Спасибо за пример, обязательно его попробую.
Это вариант для локалки. А тебе не приходилось считать модемный трафик?
Re[5]: winpcap 3.01a VS winpcap 3.1b
От: NeuroVirus Россия  
Дата: 21.12.04 12:14
Оценка:
Здравствуйте, consumer, Вы писали:

C>Здравствуйте, NeuroVirus, Вы писали:


NV>>Здравствуйте, consumer, Вы писали:


C>>>Здравствуйте, Аноним, Вы писали:


А>>>>Здравствуйте, consumer, Вы писали:


C>>>>>имеется сервак локальной сети с модемным выходом в инет. Необходимо считать трафик, который идёт из/в инета на каждую тачку этой локалки. Использовал 3.01a. Внутренний трафик сети считался не полностью, модемный трафик вообще не видел. Использовал 3.1b Модемный трафик считается абсолютно точно, а трафик локалки на нуле. В чём проблема не пойму, и как это отладить неясно. Кто-нибудь знает выход?


А>>>>покажи выражение фильтра




C>>>перед этим прочитаны интерфейсы pcap_findalldevs

C>>>Определяет два интерфейса:
C>>>Generic NdisWan Adapter
C>>>и (если модем врублен) WAN (PPP/SLIP) Interface
C>>>Так вот, трафик по моедму считается нормально. А если слушать интерфейс Generic NdisWAn (я так понял это интерфейс объединающий все сетевые адаптеры на компе, потому что у меня две сетевухи), то трафик считается в несколько раз меньший.

NV>>Ну не знаю, должно быть на каждый интерфейс по записи.

NV>>Я, правда, пользую не pcap_* а низкоуровневые вызовы,
NV>>вот мой пример на паскакале:

C>Спасибо за пример, обязательно его попробую.

C>Это вариант для локалки. А тебе не приходилось считать модемный трафик?

кстати сейчас выяснил — моя функция не будет работать с 3.1 — надо переписывать
модемный когда-то считал, ужо и не помню что там за интерфейс мне показывали,
но считало нормально и в локалке и на модеме.
кстати про "недосчет" — это может просто не все пакеты успевают ловится,
надо буфера побольше и процессор пошустрее, особенно на 100Мб сетках,
про Гигабит ethernet вообще молчу...
Re[6]: winpcap 3.01a VS winpcap 3.1b
От: consumer  
Дата: 22.12.04 21:49
Оценка:
Здравствуйте, NeuroVirus, Вы писали:

NV>>>Ну не знаю, должно быть на каждый интерфейс по записи.

NV>>>Я, правда, пользую не pcap_* а низкоуровневые вызовы,
NV>>>вот мой пример на паскакале:

C>>Спасибо за пример, обязательно его попробую.

C>>Это вариант для локалки. А тебе не приходилось считать модемный трафик?

NV>кстати сейчас выяснил — моя функция не будет работать с 3.1 — надо переписывать

NV>модемный когда-то считал, ужо и не помню что там за интерфейс мне показывали,
NV>но считало нормально и в локалке и на модеме.
NV>кстати про "недосчет" — это может просто не все пакеты успевают ловится,
Очень похоже именно на тормоза. У меня в локалке 100метров в считанные секунды копируются.
NV>надо буфера побольше и процессор пошустрее, особенно на 100Мб сетках,
NV>про Гигабит ethernet вообще молчу...
И чё теперь, фенита ля комедия? Заставить начальство проц покруче поставить из-за счётчика трафика не реально
Re[7]: winpcap 3.01a VS winpcap 3.1b
От: NeuroVirus Россия  
Дата: 23.12.04 06:59
Оценка:
Здравствуйте, consumer, Вы писали:

C>Здравствуйте, NeuroVirus, Вы писали:


NV>>кстати про "недосчет" — это может просто не все пакеты успевают ловится,

C>Очень похоже именно на тормоза. У меня в локалке 100метров в считанные секунды копируются.

когда-то я делал пробную программку, был тогда P2-300, NT4Server, 512Mb RAM? 1000Mbit сетка,
программа считала траффик, но очень неэкономно — на каждый словленный пакет обновляла статистику
в окошке. Так вот она теряла примерно половину трафика. Это так — для ориентировки.

NV>>надо буфера побольше и процессор пошустрее, особенно на 100Мб сетках,

NV>>про Гигабит ethernet вообще молчу...
C>И чё теперь, фенита ля комедия? Заставить начальство проц покруче поставить из-за счётчика трафика не реально

вообще-то правильней считать трафик на шлюзе, т.е. не мимо проходящий а проходящий сквозь.
например первый пень с free-bsd или linux и на нем все настраивается: маршуртизатор, файервол, счетчики, шейперы...
Re[8]: winpcap 3.01a VS winpcap 3.1b
От: NeuroVirus Россия  
Дата: 23.12.04 07:46
Оценка:
NV>когда-то я делал пробную программку, был тогда P2-300, NT4Server, 512Mb RAM? 1000Mbit сетка,

опечатка, 100Мбит (а не 1000
Re[7]: winpcap 3.01a VS winpcap 3.1b
От: zuzik  
Дата: 05.04.05 16:17
Оценка:
consumer у меня такая же проблема, ловится только часть траффика на ethernete, проц P4 2.4, если ты победил єто все, то черкни плиз как. может буфера увеличить (:)) звучит).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.