功能:查詢本機IP/MAC地址,過濾掉127.0.0.1 loop-back 地址
目前創新互聯建站已為上1000+的企業提供了網站建設、域名、網頁空間、綿陽服務器托管、企業網站設計、細河網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。
適用:linux, ubuntu 16.04 調試通過
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/route.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <ifaddrs.h>
void getLocalMacIp()
{
int i;
int sock_mac;
char hname[128];
struct hostent *hent;
struct in_addr *paddr = 0;
struct ifaddrs * ifAddrStruct=NULL;
struct ifreq ifr_mac;
void * tmpAddrPtr=NULL;
struct ifreq buf[16];
struct ifconf ifc;
int interface_num;
char nif_name[128] = {0};
char addressBuffer[128];
unsigned char macaddr[6] = {0};
unsigned char *pFirstByte;
//---------------------------------------------
//get device IP address, discard loopback
//---------------------------------------------
gethostname(hname, sizeof(hname));
hent = gethostbyname(hname);
printf("[%s][%d] host: %s\n", __FILE__, __LINE__, hent->h_name);
getifaddrs(&ifAddrStruct);
while (ifAddrStruct!=NULL)
{
if (ifAddrStruct->ifa_addr->sa_family==AF_INET)
{
tmpAddrPtr = &((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;
pFirstByte = (unsigned char*)tmpAddrPtr;
if(*pFirstByte != 127)
{
paddr = tmpAddrPtr;
inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, 128);
printf("[%s][%d] NIF %s address %s\n", __FILE__, __LINE__,
ifAddrStruct->ifa_name, addressBuffer);
//---------------------------------------------
//remember NIF name for future use
//---------------------------------------------
strcpy(nif_name, ifAddrStruct->ifa_name);
}
}
ifAddrStruct=ifAddrStruct->ifa_next;
}
//---------------------------------------------
//get device MAC address, discard loopback
//---------------------------------------------
sock_mac = socket( AF_INET, SOCK_DGRAM, 0 );
if(sock_mac > 0)
{
ifc.ifc_len = sizeof(buf);
ifc.ifc_req = buf;
ioctl(sock_mac, SIOCGIFCONF, (char *)&ifc);
interface_num = ifc.ifc_len / sizeof(struct ifreq);
while(interface_num--)
{
if(nif_name[0] && strcmp(nif_name, buf[interface_num].ifr_name))
{
continue;
}
ioctl(sock_mac, SIOCGIFHWADDR, (char *)&buf[interface_num]);
memcpy(macaddr, &buf[interface_num].ifr_hwaddr.sa_data[0], 6);
//printf("NIF %s ", buf[interface_num].ifr_name);
//printf("mac %02x:%02x:%02x:%02x:%02x:%02x \n",
// macaddr[0], macaddr[1], macaddr[2], macaddr[3], macaddr[4], macaddr[5]);
}
close( sock_mac );
}
}
當前題目:linux獲取本機MAC/IP地址的方法
網站路徑:http://vcdvsql.cn/article32/pehipc.html
成都網站建設公司_創新互聯,為您提供、定制網站、域名注冊、網頁設計公司、靜態網站、建站公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯