/*------------------------------------------------------------------
- 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
版权声明:本文为博主原创文章,转载请附上博文链接!在这里插入代码片