获取本地ip,mac地址---Linux C

/*------------------------------------------------------------------

  • Filename : getLocalIP.c
  • CreateTime : 2018-05-28 17:15
  • Author : tobiu
  • Description : get local ip
    ------------------------------------------------------------------*/
    #include <stdio.h>
    #include <string.h>
    #include <sys/socket.h>
    #include <arpa/inet.h>
    #include <net/if.h>
    #include <sys/ioctl.h>
    #include <unistd.h>

#define IF_NAME “ens33” //network port

/*************************************

  • @Function : get_local_ip

  • @param :

  •   ifname	:	network port
    
  •   ip 		:	store data
    
  • @Description : get local ip
    *************************************/
    int get_local_ip(char *ifname,char *ip)
    {
    char *temp = NULL;
    int inet_sock;
    struct ifreq ifr;

    inet_sock = socket(AF_INET,SOCK_DGRAM,0);

    memset(ifr.ifr_name,0,sizeof(ifr.ifr_name));
    memcpy(ifr.ifr_name,ifname,strlen(ifname));

    if(0 != ioctl(inet_sock,SIOCGIFADDR,&ifr))
    {
    perror(“ioctl error!”);
    return 1;
    }

    temp = inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr);
    memcpy(ip,temp,strlen(temp));

    close(inet_sock);

    return 0;

}

int main(int argc, char const argv[])
{
/
code */
char ip[32] = {0};
get_local_ip(IF_NAME,ip);

if(0 != strcmp(ip,""))
{
	printf("%s ip is : %s \n",IF_NAME,ip );
}
return 0;

}

作者:Tobiu
来源:优快云
原文:https://blog.youkuaiyun.com/localhostcom/article/details/80485165
版权声明:本文为博主原创文章,转载请附上博文链接!
在这里插入图片描述
获得mac地址:
int get_local_mac(unsigned char mac) {
/
get mac interface */
struct ifreq ifreq;
int sock;

if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
	perror("create socket falied...\r\n");
	return -1;
}
//strcpy(ifreq.ifr_name, "ens33");
strcpy(ifreq.ifr_name, "eth0");
if (ioctl(sock, SIOCGIFHWADDR, &ifreq) < 0) {
	perror("mac ioctl error:");
	return -1;
}
memcpy(mac, ifreq.ifr_hwaddr.sa_data, 6);

printf("%02x:%02x:%02x:%02x:%02x:%02x\n ", (unsigned char) ifreq.ifr_hwaddr.sa_data[0], (unsigned char) ifreq.ifr_hwaddr.sa_data[1], (unsigned char) ifreq.ifr_hwaddr.sa_data[2],
		(unsigned char) ifreq.ifr_hwaddr.sa_data[3], (unsigned char) ifreq.ifr_hwaddr.sa_data[4], (unsigned char) ifreq.ifr_hwaddr.sa_data[5]);

close(sock);
return 0;

}

作者:Tobiu
来源:优快云
原文:https://blog.youkuaiyun.com/localhostcom/article/details/80485165
版权声明:本文为博主原创文章,转载请附上博文链接!
使用到的是结构体:struct ifreq;
struct ifreq
{
#define IFHWADDRLEN 6
union
{
char ifrn_name[IFNAMSIZ];
} ifr_ifrn;

union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
struct sockaddr ifru_netmask;
struct sockaddr ifru_hwaddr;
short ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ];
char ifru_newname[IFNAMSIZ];
void __user * ifru_data;
struct if_settings ifru_settings;
} ifr_ifru;
};

#define ifr_name ifr_ifrn.ifrn_name
#define ifr_hwaddr ifr_ifru.ifru_hwaddr
#define ifr_addr ifr_ifru.ifru_addr
#define ifr_dstaddr ifr_ifru.ifru_dstaddr
#define ifr_broadaddr ifr_ifru.ifru_broadaddr
#define ifr_netmask ifr_ifru.ifru_netmask
#define ifr_flags ifr_ifru.ifru_flags
#define ifr_metric ifr_ifru.ifru_ivalue
#define ifr_mtu ifr_ifru.ifru_mtu
#define ifr_map ifr_ifru.ifru_map
#define ifr_slave ifr_ifru.ifru_slave
#define ifr_data ifr_ifru.ifru_data
#define ifr_ifindex ifr_ifru.ifru_ivalue
#define ifr_bandwidth ifr_ifru.ifru_ivalue
#define ifr_qlen ifr_ifru.ifru_ivalue
#define ifr_newname ifr_ifru.ifru_newname
#define ifr_settings ifr_ifru.ifru_settings

作者:Tobiu
来源:优快云
原文:https://blog.youkuaiyun.com/localhostcom/article/details/80485165
版权声明:本文为博主原创文章,转载请附上博文链接!
简单介绍: ifreq结构定义在/usr/include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的。其中包含了一个接口的名 字和具体内容——(是个共用体,有可能是IP地址,广播地址,子网掩码,MAC号,MTU或其他内容)。ifreq包含在ifconf结构中。而 ifconf结构通常是用来保存所有接口的信息的。

作者:Tobiu
来源:优快云
原文:https://blog.youkuaiyun.com/localhostcom/article/details/80485165
版权声明:本文为博主原创文章,转载请附上博文链接!在这里插入代码片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值