Добрый день. Подскажите как определить МАС адрес моей сетевухи но чтобы с помощью либы WinPcap. Имя и дескриптор определяю, а вот МАС и IP не нахожу. Имя и дескриптор определяю так : Код (Text): .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc include \masm32\include\user32.inc include \masm32\include\wsock32.inc include ..\packet\packet.inc include ..\wpcap\wpcap.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\wsock32.lib includelib ..\packet\packet.lib includelib ..\wpcap\wpcap.lib .data crlf db 13,10,0 szErrpcap_findalldevs db "Error in pcap_findalldevs",0 szformat db "%hS",0 compteur dd 0 .data? alldevs pcap_if_t <?> errbuf db [PCAP_ERRBUF_SIZE] dup (?) buffsz db [MAX_PATH] dup (?) .code start: invoke pcap_findalldevs,addr alldevs,addr errbuf .if (eax == -1) invoke StdOut, addr szErrpcap_findalldevs .endif assume ecx:ptr pcap_if mov ecx,alldevs inc compteur @@: push ecx invoke wsprintf,addr buffsz, addr szformat,[ecx]._name invoke StdOut, addr buffsz invoke StdOut, addr crlf pop ecx push ecx ;| invoke wsprintf,addr buffsz, addr szformat,[ecx].description invoke StdOut, addr buffsz invoke StdOut, addr crlf pop ecx push ecx .if ([ecx].next) invoke StdOut, addr crlf pop ecx mov ecx,[ecx].next inc compteur jmp @B .else pop ecx .endif assume ecx:nothing invoke pcap_freealldevs,alldevs invoke ExitProcess,0 end start Не хочу просто в проект тулить еще и iphlpapi. Или придется? Подскажите кто знает плиззз )))
_sheva740 OID_802_3_PERMANENT_ADDRESS - для получения реального MAC (прошитого в EEPROM) OID_802_3_CURRENT_ADDRESS - для получения MAC, который используется системой
T800 Спасибо! Вот нашел пример как читать-писать из под winpcap (ее packet.dll) Код (Text): int getmac(pcap_t* ha, char* pStr) { PPACKET_OID_DATA pOidData; CHAR pAddr[sizeof(PACKET_OID_DATA)+5]; ZeroMemory(pAddr, sizeof(PACKET_OID_DATA)+5); pOidData = (PPACKET_OID_DATA) pAddr; pOidData->Oid = OID_802_3_CURRENT_ADDRESS; ///<<<<<<<<<<<<<< pOidData->Length = 6; if(PacketRequest(ha->adapter, FALSE, pOidData)) ///<<<<<<<<<<<< FALSE - читать TRUE - внести изминения { sprintf(pStr, "%.02X:%.02X:%.02X:%.02X:%.02X:%.02X", pOidData->Data[0],pOidData->Data[1],pOidData->Data[2], pOidData->Data[3],pOidData->Data[4],pOidData->Data[5]); }else{ return 0; } return 1; . Не подскажете как перевести структурку из с в masm Код (Text): ;struct _PACKET_OID_DATA { ; ULONG Oid; ///< OID code. See the Microsoft DDK documentation or the file ntddndis.h ; ///< for a complete list of valid codes. ; ULONG Length; ///< Length of the data field ; UCHAR Data[1]; ///< variable-lenght field that contains the information passed to or received ; ///< from the adapter. ; }; ......... Так ???? Код (Text): PACKET_OID_DATA struct Oid DWORD 0 Lengthz DWORD 0 Dataz BYTE 256 dup( 0 ) PACKET_OID_DATA ends
T800 Не могу понять ((( ошибка - 000006 - неверный дискриптор после invoke PacketRequest, adhandle, 0,esi Код (Text): param_m proc param:DWORD local tmp[256]:BYTE local pOidData: PACKET_OID_DATA local pAddr[sizeof(PACKET_OID_DATA)+5]: BYTE invoke StdOut, addr szparam_m invoke StdOut, addr crlf invoke pcap_findalldevs,addr alldevs,addr errbuf .if (eax == -1) invoke StdOut, addr szErrpcap_findalldevs .endif mov eax,1 assume ecx:ptr pcap_if mov ecx,alldevs assume edx:ptr pcap_if mov edx,alldevs .while (eax != DevSelection) ; DevSelection =1 assume edx:ptr pcap_if mov edx,[ecx].next mov ecx,edx inc eax .endw invoke wsprintf,addr buffsz, addr szformat,[edx]._name invoke pcap_open_live,addr buffsz,\ 65536,\ 1,\ 1000,\ addr errbuf mov adhandle,eax .if !eax invoke StdOut, addr szErrOpenDev invoke pcap_freealldevs,alldevs jmp __exit .endif invoke RtlZeroMemory, addr pAddr,sizeof(PACKET_OID_DATA)+5 assume esi:ptr PACKET_OID_DATA lea esi,pAddr mov dword ptr [esi].Oid,1010101h; == OID_802_3_PERMANENT_ADDRESS mov dword ptr [esi].Lengthz,6 int 3 invoke PacketRequest, pcap_t ptr [adhandle].adapter, 0,esi invoke wsprintf,addr buffsz, addr szformatMAC,[esi].Dataz,\ [esi].Dataz+1,\ [esi].Dataz+2,\ [esi].Dataz+3,\ [esi].Dataz+4,\ [esi].Dataz+5 invoke StdOut, addr buffsz invoke StdOut, addr crlf invoke pcap_freealldevs,alldevs __exit: ret param_m endp В примере выше конечно нужно - invoke PacketRequest, pcap_t ptr [adhandle].adapter, 0,esi но не могу найти как выглядит структура pcap_t Не подскажете ? plz )))