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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.