获取Linux本地IP信息

#include<stdlib.h>  
#include<stdio.h>  
#include<unistd.h>  
#include<net/if.h>  
#include<net/if_arp.h>  
#include<arpa/inet.h>  
#include<sys/ioctl.h>  
#include<errno.h>  
#include <string.h>
  

//  出处\src\http.c文件的setLocalHost函数, 换种方式获取ip地址 (ipv4)
//#define ETH_NAME  "eth0"  
#define ETH_NAME  "ens33" 

static void get_local_ip(int sock_fd);  
static void get_netmask_addr(int sock_fd);  
static void get_mac_addr(int sock_fd);  
static void get_broad_addr(int sock_fd);  
struct sockaddr_in  sin;  
struct sockaddr_in  netmask;  
struct sockaddr_in  broad;  
struct ifreq ifr;  
unsigned char arp[6];  

int main()  
{  
	int sockfd;  
	//create socket  
	sockfd = socket(AF_INET,SOCK_DGRAM,0);  
	if (sockfd == -1)  
	{  
		perror("socket");  
		return -1;  
	}  

	get_local_ip(sockfd);       /* get ip */
	get_mac_addr(sockfd);       /* get mac */
	get_netmask_addr(sockfd);   /* get netmask */
	get_broad_addr(sockfd);     /* get broad addr 广播地址 */
  
	return 0;  
}  
static void get_local_ip(int sock_fd)  
{  
	strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);  
	ifr.ifr_name[IFNAMSIZ - 1] = 0;  
	if (ioctl(sock_fd, SIOCGIFADDR, &ifr) == 0)  
	{  
		memcpy(&sin, &ifr.ifr_addr, sizeof(sin));  
		fprintf(stdout,"%s: %s\n", ETH_NAME, inet_ntoa(sin.sin_addr));  
	}  
}  
static void get_mac_addr(int sock_fd)  
{  
	if (ioctl(sock_fd,SIOCGIFHWADDR, &ifr) == 0)  
	{  
		memcpy(arp, ifr.ifr_hwaddr.sa_data, 6);  
		printf("adapter hardware address %x:%x:%x:%x:%x:%x\n", 
                              arp[0], arp[1], arp[2], arp[3], arp[4], arp[5]);  
	}  
}  
static void get_netmask_addr(int sock_fd)  
{  
	if (ioctl(sock_fd, SIOCGIFNETMASK,&ifr) == 0)  
	{  
		memcpy(&netmask,&ifr.ifr_netmask,sizeof(netmask));  
		printf("netmask: %s\n",inet_ntoa(netmask.sin_addr));  
	}  
}  
static void get_broad_addr(int sock_fd)  
{  
	if (ioctl(sock_fd, SIOCGIFBRDADDR, &ifr) == 0)  
	{  
		memcpy(&broad, &ifr.ifr_broadaddr, sizeof(broad));  
		printf("broad: %s\n", inet_ntoa(broad.sin_addr));  
	}  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值