- 论坛徽章:
- 0
|
如何在FreeBSD下实现获取MAC地址?谢谢
我这个好象更简单:(linux 7.2上通过)#include <stdio.h>;
#include <string.h>;
#include <netdb.h>;
#include <arpa/inet.h>;
#include <netinet/in.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <sys/ioctl.h>;
#include <net/if.h>;
#include <net/if_arp.h>;
#include <net/ethernet.h>;
#include <signal.h>;
#include <netinet/ip.h>;
struct in_addr myself,mymask;
int fd_arp;
struct ifreq ifr;
main(int argc,char* argv[]) {
char device[32];
struct sockaddr from,to;
int fromlen;
struct sockaddr_in *sin_ptr;
u_char *ptr;
int n;
strcpy(device,"lo" ;
if((fd_arp=socket(AF_INET,SOCK_PACKET,htons(0x0806)))<0) {
perror("arp socket error" ;
exit(-1);
}
strcpy(ifr.ifr_name,device);
if(ioctl(fd_arp,SIOCGIFADDR,&ifr)<0) {
perror("ioctl SIOCGIFADDR error" ;
exit(-1);
}
sin_ptr=(struct sockaddr_in *)&ifr.ifr_addr;
myself=sin_ptr->;sin_addr;
// get network mask
if(ioctl(fd_arp,SIOCGIFNETMASK,&ifr)<0) {
perror("ioctl SIOCGIFNETMASK error" ;
exit(-1);
}
sin_ptr=(struct sockaddr_in *)&ifr.ifr_addr;
mymask=sin_ptr->;sin_addr;
// get mac address
if(ioctl(fd_arp,SIOCGIFHWADDR,&ifr)<0) {
perror("ioctl SIOCGIFHWADDR error" ;
exit(-1);
}
ptr=(u_char *)&ifr.ifr_ifru.ifru_hwaddr.sa_data[0];
printf("\nrequest mac %02x:%02x:%02x:%02x:%02x:%02x,",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
printf("\nrequest netmask %s",inet_ntoa(mymask));
printf("\nrequest IP %s\n",inet_ntoa(myself));
} |
|