[Winpcap-users] Problem getting local MAC

samu samudavid at hotmail.com
Mon Jan 5 01:35:41 GMT 2009


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/GetMacAdress

The 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 10
int 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);

}

_________________________________________________________________
Comparte hasta 500 fotos en un solo email con Windows Live
http://download.live.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.winpcap.org/pipermail/winpcap-users/attachments/20090105/fce10b27/attachment.htm


More information about the Winpcap-users mailing list