当前位置: 技术问答>linux和unix
高分求----怎样获取本机IP和MAC地址呢?
来源: 互联网 发布时间:2015-10-17
本文导语: 我怎样获取本机有几个NIC和每个NIC的MAC地址及与其绑定的所有IP地址呢,怎样获取ARP高速缓存中的ARP表的内容呢? | 例子:(在SOLARIS 环境下通过) 输入IP 地址,返回MAC 地址: #include #include ...
我怎样获取本机有几个NIC和每个NIC的MAC地址及与其绑定的所有IP地址呢,怎样获取ARP高速缓存中的ARP表的内容呢?
|
例子:(在SOLARIS 环境下通过)
输入IP 地址,返回MAC 地址:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int sockfd;
char *ptr;
struct arpreq arp;
struct sockaddr_in *arptr;
sockfd = socket(AF_INET, SOCK_STREAM, 0); //create any type of socket
arptr = (struct sockaddr_in *)&arp.arp_pa;
bzero(arptr, sizeof(struct sockaddr_in));
arptr->sin_family = AF_INET;
arptr->sin_addr.s_addr = inet_addr(argv[1]);
ioctl(sockfd, SIOCGARP, &arp);
printf("addr = %s, arp mac = %x %x %x %x %x %x %x %xn",
inet_ntoa(arptr->sin_addr), arp.arp_ha.sa_data[0], arp.arp_ha.sa_da
ta[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], arp.arp_ha.sa_data[8]);
ptr = arp.arp_ha.sa_data;
printf("mac = %x:%x:%x:%x:%x:%xn", *(ptr)&0xff, *(ptr+1)&0xff,
*(ptr+2)&0xff, *(ptr+3)&0xff, *(ptr+4)&0xff, *(ptr+5)&0xff);
}
根据网卡名字输出MAC 地址:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ETH_NAME "eri0"
int main()
{
int sock;
struct sockaddr_in sin;
struct ifreq ifr;
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
{
perror("socket");
return -1;
}
strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = 0;
if (ioctl(sock, SIOCGIFADDR, &ifr)
输入IP 地址,返回MAC 地址:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int sockfd;
char *ptr;
struct arpreq arp;
struct sockaddr_in *arptr;
sockfd = socket(AF_INET, SOCK_STREAM, 0); //create any type of socket
arptr = (struct sockaddr_in *)&arp.arp_pa;
bzero(arptr, sizeof(struct sockaddr_in));
arptr->sin_family = AF_INET;
arptr->sin_addr.s_addr = inet_addr(argv[1]);
ioctl(sockfd, SIOCGARP, &arp);
printf("addr = %s, arp mac = %x %x %x %x %x %x %x %xn",
inet_ntoa(arptr->sin_addr), arp.arp_ha.sa_data[0], arp.arp_ha.sa_da
ta[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], arp.arp_ha.sa_data[8]);
ptr = arp.arp_ha.sa_data;
printf("mac = %x:%x:%x:%x:%x:%xn", *(ptr)&0xff, *(ptr+1)&0xff,
*(ptr+2)&0xff, *(ptr+3)&0xff, *(ptr+4)&0xff, *(ptr+5)&0xff);
}
根据网卡名字输出MAC 地址:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ETH_NAME "eri0"
int main()
{
int sock;
struct sockaddr_in sin;
struct ifreq ifr;
sock = socket(AF_INET, SOCK_DGRAM, 0);
if (sock == -1)
{
perror("socket");
return -1;
}
strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);
ifr.ifr_name[IFNAMSIZ - 1] = 0;
if (ioctl(sock, SIOCGIFADDR, &ifr)