getipmask.c

来自「arm平台下路由器设计中获取机器ip和mask的代码」· C语言 代码 · 共 63 行

C
63
字号
#include 	<sys/socket.h>
#include	<sys/ioctl.h>
#include	<netinet/in.h>
#include 	<arpa/inet.h>
#include	<net/if.h>

#define	ETH_NAME "eth0"
int main()
{	int sock;
	char * localaddr=NULL;
	char * localmask=NULL;
	struct sockaddr_in 	* sin, *mask;
	struct	ifreq 		ifr;
	char 	buff[256];
	
	sock=socket(AF_INET,SOCK_DGRAM,0);
	if(sock==-1)
	{	perror("Error:get local ip socker failed!");
		return 0;
	}
	else
	{	
		printf("sock success\n");
	}
	
	strncpy(ifr.ifr_name,ETH_NAME,IFNAMSIZ);
	ifr.ifr_name[IFNAMSIZ-1]=0;
	printf("%s\n",ifr.ifr_name);
	
	if(ioctl(sock,SIOCGIFADDR,&ifr)<0)
	{	perror("Error:get local ip ioctl fail!");
		return 0;
	}
	else
	{	printf("ioctl success\n");
	}

	memcpy(buff,&ifr.ifr_addr,sizeof(struct sockaddr_in));
	sin=(struct sockaddr_in *)buff;
	localaddr=inet_ntoa(sin->sin_addr);
	printf("local      ip:%s\n",localaddr);
       
	if(ioctl(sock,SIOCGIFNETMASK,&ifr)<0)
	{	perror("Error:get local netmask ioctl fail!");
		return 0;
	}
	else
	{	printf("ioctl success\n");
	}

	memset(buff,0,256);
	memcpy(buff,&ifr.ifr_netmask,sizeof(struct sockaddr_in));
	mask=(struct sockaddr_in *)buff;
	localmask=inet_ntoa(mask->sin_addr);
	printf("local netmask:%s\n",localmask);



	
	
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?