獲取本機網絡卡IP及對應的mac
阿新 • • 發佈:2019-02-12
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <arpa/inet.h>
#include <errno.h>
typedef long LONG;
typedef char CHAR;
#define CONST const
#ifndef SUCCESS
#define SUCCESS 0
#endif
#ifndef FAIL
#define FAIL -1
#endif
LONG GetMac(CONST CHAR *pcIfName, CHAR *pcMac)
{
if (NULL == pcIfName || NULL == pcMac)
{
printf("NULL == pcIfName || NULL == pcMac\n");
return FAIL;
}
LONG lFd = 0, lRet = FAIL;
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, pcIfName);
lFd = socket(AF_INET, SOCK_STREAM, 0);
if(lFd < 0)
{
printf("socket fail\n");
return FAIL;
}
//lRet = ioctl(lFd, SIOCGIFHWADDR, &ifr, sizeof(ifr));
lRet = ioctl(lFd, SIOCGIFHWADDR, &ifr);
if(0 == lRet)
{
memcpy(pcMac, ifr.ifr_hwaddr.sa_data, 6);
printf("\nifr.ifr_hwaddr.sa_data is %s \n",ifr.ifr_hwaddr.sa_data);
close(lFd);
return SUCCESS;
}
else
{
printf("ioctl fail\n");
close(lFd);
return FAIL;
}
}
LONG GetIp(CONST CHAR *pcIfName, CHAR *pcIp)
{
if (NULL == pcIfName || NULL == pcIp)
{
printf("NULL == pcIfName || NULL == pcIp\n");
return FAIL;
}
LONG lFd = 0, lRet = FAIL;
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, pcIfName);
lFd = socket(AF_INET, SOCK_STREAM, 0);
if(lFd < 0)
{
printf("socket fail\n");
return FAIL;
}
lRet = ioctl(lFd, SIOCGIFADDR, &ifr);
if(0 == lRet)
{
strncpy(pcIp,inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr),16);
close(lFd);
return SUCCESS;
}
else
{
printf("ioctl fail\n");
close(lFd);
return FAIL;
}
}
int main()
{
LONG lRet = FAIL;
CHAR szMac[6] = {0};
CHAR szIp[16] = {0};
CHAR szID[21] = {0};
int i=0;
int ulLen = 0;
lRet = GetMac("eth0", szMac);
for(i = 0; i < sizeof(szMac); i++)
{
sprintf(szID + strlen((const char*)szID), "%02X", szMac[i]);
ulLen = snprintf(szID, 1024, "%02X", szMac[i]);
ulLen +=snprintf((szID + ulLen), 1024, "%02X", szMac[i]);
printf("%0x,",szMac[i]);
}
printf("\nlRet is %lu,mac is %s\n",lRet,szID);
lRet = GetIp("eth0", szIp);
printf("lRet is %lu,szIp is %s\n",lRet,szIp);
return 0;
}
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <string.h>
#include <net/if.h>
#include <net/if_arp.h>
#include <arpa/inet.h>
#include <errno.h>
typedef long LONG;
typedef char CHAR;
#define CONST const
#ifndef SUCCESS
#define SUCCESS 0
#endif
#ifndef FAIL
#define FAIL -1
#endif
LONG GetMac(CONST CHAR *pcIfName, CHAR *pcMac)
{
if (NULL == pcIfName || NULL == pcMac)
{
printf("NULL == pcIfName || NULL == pcMac\n");
return FAIL;
}
LONG lFd = 0, lRet = FAIL;
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, pcIfName);
lFd = socket(AF_INET, SOCK_STREAM, 0);
if(lFd < 0)
{
printf("socket fail\n");
return FAIL;
}
//lRet = ioctl(lFd, SIOCGIFHWADDR, &ifr, sizeof(ifr));
lRet = ioctl(lFd, SIOCGIFHWADDR, &ifr);
if(0 == lRet)
{
memcpy(pcMac, ifr.ifr_hwaddr.sa_data, 6);
printf("\nifr.ifr_hwaddr.sa_data is %s \n",ifr.ifr_hwaddr.sa_data);
close(lFd);
return SUCCESS;
}
else
{
printf("ioctl fail\n");
close(lFd);
return FAIL;
}
}
LONG GetIp(CONST CHAR *pcIfName, CHAR *pcIp)
{
if (NULL == pcIfName || NULL == pcIp)
{
printf("NULL == pcIfName || NULL == pcIp\n");
return FAIL;
}
LONG lFd = 0, lRet = FAIL;
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, pcIfName);
lFd = socket(AF_INET, SOCK_STREAM, 0);
if(lFd < 0)
{
printf("socket fail\n");
return FAIL;
}
lRet = ioctl(lFd, SIOCGIFADDR, &ifr);
if(0 == lRet)
{
strncpy(pcIp,inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr),16);
close(lFd);
return SUCCESS;
}
else
{
printf("ioctl fail\n");
close(lFd);
return FAIL;
}
}
int main()
{
LONG lRet = FAIL;
CHAR szMac[6] = {0};
CHAR szIp[16] = {0};
CHAR szID[21] = {0};
int i=0;
int ulLen = 0;
lRet = GetMac("eth0", szMac);
for(i = 0; i < sizeof(szMac); i++)
{
sprintf(szID + strlen((const char*)szID), "%02X", szMac[i]);
ulLen = snprintf(szID, 1024, "%02X", szMac[i]);
ulLen +=snprintf((szID + ulLen), 1024, "%02X", szMac[i]);
printf("%0x,",szMac[i]);
}
printf("\nlRet is %lu,mac is %s\n",lRet,szID);
lRet = GetIp("eth0", szIp);
printf("lRet is %lu,szIp is %s\n",lRet,szIp);
return 0;
}