[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