- 论坛徽章:
- 0
|
程序如下:
#include <stdio.h>;
#include <errno.h>;
#include <sys/param.h>;
#include <sys/socket.h>;
#include <sys/types.h>;
#include <sys/sio.h>;
#include <sys/ioctl.h>;
#include <netinet/in.h>;
#include <netinet/tcp.h>;
#include <net/if.h>;
#include <net/if_arp.h>;
#include <netdb.h>;
#include <unistd.h>;
#include <stropts.h>;
#include <arpa/inet.h>;
#include <paths.h>;
#include "all.h"
int GetMac(struct in_addr *addrptr )
{
char *ptr;
struct arpreq arp;
struct sockaddr_in *arptr;
int sockfd;
int iRet;
char str[5];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if( sockfd < 0 ) {
errcall(ERROR,"socket fail[%d] error[%d][%s]",
sockfd,strerror(errno));
return -1;
}
arptr = (struct sockaddr_in *)&arp.arp_pa;
bzero(arptr, sizeof(struct sockaddr_in));
arptr->;sin_family = AF_INET;
memcpy(&arptr->;sin_addr,addrptr,sizeof(struct in_addr));
iRet = ioctl(sockfd, SIOCGARP, &arp);
if( iRet ) {
errcall(ERROR,"ioctl error[%d][%s]", iRet,strerror(errno));
LogHex("arp_pa",arp.arp_pa.sa_data,14);
memcpy(str,arp.arp_pa.sa_data+2,4);
str[4] = 0;
errcall(ERROR,"addr=[%s]",inet_ntoa(arptr->;sin_addr));
return -1;
}
errcall(ERROR,"addr=%s,macstr[%s]mac=%ux %ux %ux %ux %ux %ux %ux %ux",
inet_ntoa(arptr->;sin_addr), arp.arp_ha.sa_data,
arp.arp_ha.sa_data[0], arp.arp_ha.sa_data[1],
errcall(ERROR,"ioctl error[%d][%s]", iRet,strerror(errno));
LogHex("arp_pa",arp.arp_pa.sa_data,14);
memcpy(str,arp.arp_pa.sa_data+2,4);
str[4] = 0;
errcall(ERROR,"addr=[%s]",inet_ntoa(arptr->;sin_addr));
return -1;
}
errcall(ERROR,"addr=%s,macstr[%s]mac=%ux %ux %ux %ux %ux %ux %ux %ux",
inet_ntoa(arptr->;sin_addr), arp.arp_ha.sa_data,
arp.arp_ha.sa_data[0], arp.arp_ha.sa_data[1],
arp.arp_ha.sa_data[2], arp.arp_ha.sa_data[3],
arp.arp_ha.sa_data[4], arp.arp_ha.sa_data[5],
arp.arp_ha.sa_data[6], arp.arp_ha.sa_data[7] );
ptr = arp.arp_ha.sa_data;
errcall(ERROR,"mac = %x:%x:%x:%x:%x:%x",
*(ptr)&0xff, *(ptr+1)&0xff, *(ptr+2)&0xff,
*(ptr+3)&0xff, *(ptr+4)&0xff, *(ptr+5)&0xff);
return 0;
}
运行环境:SCO openserver 5.0.5
运行后报错:
2000-04-16 17:16:41:220 getmac.c(43) : ioctl error[-1][No such device or address
] |
|