[Winpcap-users] Problem getting local MAC
Gianluca Varenni
gianluca.varenni at cacetech.com
Wed Jan 7 19:38:16 GMT 2009
Have you debugged your application? Where does it crash exactly? within your app code or within the winpcap dlls?
Have a nice day
GV
----- Original Message -----
From: samu
To: winpcap-users at winpcap.org
Sent: Sunday, January 04, 2009 5:35 PM
Subject: [Winpcap-users] Problem getting local MAC
Hello everybody,
Im using WPCAP to send and capture ethernet packets. My program is written in VS C 2003.
I need to get my local MAC address to send ethernets frames with my MAC address in the source field. I was looking for it in the mail list and found the following example in the developers pack:
Examples-Remote/PacketDriver/GetMacAdressThe program works perfectly, but when i add the code to my program it stops working. I´ve comment out all the things that i don´t need.When i run the program it fails (in run time) with an exception accesing a memory location. I´ve checked that the array "AdapterList" stores the correct information.Thanks a lot to everybody, i hope that the problem is easy to be solved. #define Max_Num_Adapter 10int CRSACOM::ObtenerMACLocal(int Open){ char AdapterList[Max_Num_Adapter][1024]; LPADAPTER lpAdapter = 0; int i; DWORD dwErrorCode; char AdapterName[8192]; char *temp,*temp1; int AdapterNum=0; ULONG AdapterLength; PPACKET_OID_DATA OidData; BOOLEAN Status; // // Obtain the name of the adapters installed on this machine //// printf("Packet.dll test application. Library version:%s\n", PacketGetVersion()); //printf("Adapters installed:\n"); i=0; AdapterLength = sizeof(AdapterName); if(PacketGetAdapterNames(AdapterName,&AdapterLength)==FALSE){ //printf("Unable to retrieve the list of the adapters!\n"); return -1; } temp=AdapterName; temp1=AdapterName; while ((*temp!='\0')||(*(temp-1)!='\0')) { if (*temp=='\0') { memcpy(AdapterList[i],temp1,temp-temp1); temp1=temp+1; i++; } temp++; } AdapterNum=i; //for (i=0;i<AdapterNum;i++) // printf("\n%d- %s\n",i+1,AdapterList[i]); //printf("\n");/* do { printf("Select the number of the adapter to open : "); scanf("%d",&Open); if (Open>AdapterNum) printf("\nThe number must be smaller than %d",AdapterNum); } while (Open>AdapterNum); */ // // Open the selected adapter // lpAdapter = PacketOpenAdapter(AdapterList[Open]); if (!lpAdapter || (lpAdapter->hFile == INVALID_HANDLE_VALUE)) { dwErrorCode=GetLastError(); //printf("Unable to open the adapter, Error Code : %lx\n",dwErrorCode); return -1; } // // Allocate a buffer to get the MAC adress // OidData = (PACKET_OID_DATA*)malloc(6 + sizeof(PACKET_OID_DATA)); if (OidData == NULL) { //printf("error allocating memory!\n"); PacketCloseAdapter(lpAdapter); return -1; } // // Retrieve the adapter MAC querying the NIC driver // OidData->Oid = OID_802_3_CURRENT_ADDRESS; OidData->Length = 6; ZeroMemory(OidData->Data, 6); Status = PacketRequest(lpAdapter, FALSE, OidData); if(Status) { memcpy(MACLocal,OidData->Data,6); /* printf("The MAC address of the adapter is %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", (PCHAR)(OidData->Data)[0], (PCHAR)(OidData->Data)[1], (PCHAR)(OidData->Data)[2], (PCHAR)(OidData->Data)[3], (PCHAR)(OidData->Data)[4], (PCHAR)(OidData->Data)[5]);*/ } else { //printf("error retrieving the MAC address of the adapter!\n"); } free(OidData); PacketCloseAdapter(lpAdapter); return (0);}
------------------------------------------------------------------------------
¡Accede al correo desde el móvil! ¿Qué opinas?
------------------------------------------------------------------------------
_______________________________________________
Winpcap-users mailing list
Winpcap-users at winpcap.org
https://www.winpcap.org/mailman/listinfo/winpcap-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.winpcap.org/pipermail/winpcap-users/attachments/20090107/e5178e29/attachment.htm
More information about the Winpcap-users
mailing list