MAC-Adresse ermitteln
-
Hallo,
mein Problem:
Um die Mac-Adresse eines Servers herausfinden zu können, sende ich einen Broadcoast mit der IP des Servers ins Netz (ARP-Request). Als Antwort erhalte ich dann die Mac des Servers vom Server.Das Problem ist jetzt, dass ich meine eigenen Mac und IP Adressen für den ARP-Request kennen muss.
meine Frage:
wie kann ich mit c++ diese Adressen (Mac- und IP-Adresse) meiner Netzwerkkarte herausfinden?Infos
- Ich benutze die SDK und die pcap.h
- die Anwendung soll unter Wondows XP und W2k laufenWürde mich wirklich sehr sehr freuen wenn mir jemand helfen könnte, bin für jede Anregung oder Info dankbar
vielen Dank im voraus
Gruß Tupo13
-
HOWTO: Get the MAC Address for an Ethernet Adapter: http://support.microsoft.com/default.aspx%3Fscid%3Dkb%3Ben-us%3B118623
oder
WMI SDK with Win32_NetworkAdapter; http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_networkadapter.aspoder
CString GetMACAddress(int adapternumber) { int nAdapterCount = 0; ULONG ip; ULONG buflen; PIP_ADAPTER_INFO pAdInfo = NULL; PIP_ADAPTER_INFO pAdInfo_c = NULL; buflen = 0; GetAdaptersInfo(pAdInfo, &buflen); //since buflen=0, buffer is // too small. function returns required buffersize in buflen. pAdInfo = (struct _IP_ADAPTER_INFO *)new UCHAR[buflen+1]; pAdInfo_c = pAdInfo; if (GetAdaptersInfo(pAdInfo, &buflen) == ERROR_SUCCESS) { do { ip = inet_addr(pAdInfo->IpAddressList.IpAddress.String); if ((ip != 0)&&(ip != 0x7f000001)) { nAdapterCount++; if ((nAdapterCount == adapternumber)||(adapternumber == 0)) { if (pAdInfo->AddressLength != 0) { CString macstr; for (int i = 0; i < (int)pAdInfo->AddressLength; i++) { CString temp; temp.Format(_T(" %02X"), pAdInfo->Address[i]); macstr += temp; } delete pAdInfo; return macstr; } } } } while ((pAdInfo->Next != NULL)&&((pAdInfo = pAdInfo->Next) != pAdInfo)); } delete pAdInfo_c; return _T(""); }
-
@ Jochen
Danke für deine schnelle Antwort.
Leider kann ich dein Bsp. nicht kompilieren.Ich bekomme jedesmal eine Fehlermeldung in der iphlpapi.h die ich ja aus der SDK hab. error C2065: 'PMIB_ICMP_EX' : nichtdeklarierter Bezeichner....
Das gleiche passiert auch bei fertigen Beispielen die diese Headerdatei benutzen.
Was mache ich nur falsch?
hast du eine Idee?gruß Tupo
-
Welches VS?
-
VS 6.0
wenn ich die SDK/Include an erste Stelle setze, dann funktioniert das Bsp.
Mache ich das aber in meinem bereits vorhandenen Programm, dann bekomme ich jede menge Fehler?Gruß Tupo13
-
Dir fehlt die Library, ich hatte auch das Problem gehabt, bis ich es mir irgendwo gesaugt habe, finde die zip Datei bloss nciht mehr
Sonst hätte ich noch hochgeladen.
Such mal einfach nach IPHlpAPI.zipHab was gefunden, gucks mir aber ncih an, kannst ja testen:
ftp://delphi-jedi.org/api/IPHlpAPI.zip
-
@sadi
Danke für deine Antwort:Ich habe die bereits, das sind glaube ich alle die ich benötige:
IPHlpAPI.dll
IPHlpAPI.lib
IPHlpAPI.hwenn ich nur die IPHlpAPI.h verwende funkitoniert alles einwandfrei.
wenn ich nur die pcap.h Datei includiere funktioniert auch alles einwandfrei.wenn ich jetzt aber beide verwenden will bekomme ich jede Menge Fehlermeldungen.
Das liegt wohl daran, dass pcap.h Headerdateien aus den VC98 verwendet und IPHlpAPI.h Headerdateien aus der SDK verwendet. Die Headerdateien haben den gleichen Namen aber sind unterschiedlich...
Kann das sein? Kann man sowas in den Griff bekommen?
Oder liegt es an etwas anderemGruß Tupo13
-
OK
danke für eure Hilfehabe jetzt in der wspiapi.h was rausgeworfen, so wie es aussieht funktioniert noch alles
Danke nochmal
Gruß Tupo13