Здравствуйте, 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;