[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