Einzelnen Beitrag anzeigen

EConvertError

Registriert seit: 29. Sep 2003
Ort: Österreich
230 Beiträge
 
#1

Sekündlich wechselnde MAC Adresse!?

  Alt 13. Nov 2005, 18:33
Hallo!

Ich schreibe gerade einen Netzwerk Traffic Monitor. Um den Adapter zu identifizieren benutze ich die MAC-Adresse. Allerdings bekomme ich jedesmal wenn ich mir neue Daten von der IPHlpApi hole (ich benutze die Header vom JEDI Project) eine andere MAC Addresse.

Hier mein Code:
Delphi-Quellcode:
procedure TTraffic.ProcessNetworkData(Sender: TObject);
var
  Size: ULONG;
  pIfTable: PMibIfTable;
begin
  { Get IfTableMIB... }
  Size := 0;
  // First call: Get memsize needed
  if not GetIfTable(nil, Size, True) = ERROR_BUFFER_OVERFLOW then
    Exit;

  try
    pIfTable := AllocMem(Size);
    if GetIfTable(pIfTable, Size, True) = ERROR_SUCCESS then
      UpdateAdaptersList(pIfTable);
  finally
    FreeMem(pIfTable);
  end;

end;

procedure TTraffic.UpdateAdaptersList(var pIfTable: PMibIfTable);
var
  I: Integer;
  Adapter: TAdapter;
begin
  { Check which TAdapter-Objects are to delete... }
  for I := 0 to FAdapters.Count -1 do
    if not IsIndexValid(TAdapter(FAdapters[I]).AdapterIndex, pIfTable) then
    begin
      { OnAdapterDelete event }
      if Assigned(FOnAdapterDelete) then
        FOnAdapterDelete(FAdapters[I] as TAdapter);
      { Delete adapter... }
      FAdapters.Delete(I);
    end;

  { Check which TAdapter-Objects are to add and update existing adapters... }
  { pIfTable^.table[x] = TMibIfRow }
  for I := 0 to pIfTable^.dwNumEntries - 1 do
  begin^
    // HIER IST DAS PROBLEM: bPhysAddr HAT IMMER EINEN ANDEREN WERT!
    Adapter := GetAdapterByMACAddr(TMACAddress(pIfTable^.table[I].bPhysAddr),
       pIfTable^.table[I].dwPhysAddrLen);
    if Adapter <> nil then
      Adapter.FeedWithData(pIfTable^.table[I])
    else
      RegisterNewAdapter(pIfTable^.table[I]);
  end

function TTraffic.GetAdapterByMACAddr(const MACAddr: TMACAddress;
   const MACAddrLen: Cardinal): TAdapter;
var
  I: Integer;
begin
  { Return adapter with given MAC-address }
  Result := nil;
  for I := 0 to FAdapters.Count -1 do
  begin
    if (TAdapter.MacAddrToStr(MACAddr, MACAddrLen)) = (TAdapter(FAdapters[I]).MACAddr) then
    begin
      Result := FAdapters[I] as TAdapter;
      Exit;
    end;
  end;
end;
FAdapters ist eine TObjectList. Der Fehler liegt garantiert nicht bei der class function MacAddrToStr.

Das Problem ist: pIfTable^.table[I].bPhysAddr hat immer einen anderen Wert. Allerdings halte ich es für ein Gerücht, dass sich meine MAC-Adresse sekündlich ändert.

Hoffentlich kann mir jemand helfen...

Vielen Dank für eure Hilfe,
Andreas
Andreas N.
  Mit Zitat antworten Zitat