⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipconfig.h

📁 zebra测试源代码用于 SOCKET 通信
💻 H
字号:
#include  <stdio.h>      
#include  <sys/types.h>      
#include  <sys/param.h>      
#include  <string.h> 
#include  <sys/ioctl.h>      
#include  <sys/socket.h>      
#include  <net/if.h>      
#include  <netinet/in.h>      
#include  <net/if_arp.h>      
#include  <arpa/inet.h>  
#include  <unistd.h>  //for  close()  


#include  <stdlib.h> 

char *get_ip(char *devname)
{
	struct ifreq ifreq;
	int sockfd;
	char *gv_ipaddr;

	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("socket");
		return 0;
	}
	strcpy(ifreq.ifr_name, devname);

	if(ioctl(sockfd, SIOCGIFADDR, &ifreq) < 0)
	{
		perror("ioctl");
		return 0;
	}
	gv_ipaddr=inet_ntoa(((struct  sockaddr_in  *)&ifreq.ifr_addr)->sin_addr);
	puts("IP  address  is:");      
	puts(gv_ipaddr);
	
	close(sockfd);
	return gv_ipaddr;
}

char *get_netmask(char *ip, char *devname)
{
    struct ifreq ifreq;
    int sockfd;
	char *gv_netmask;

    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
    {
        perror("socket");
        return 0;
    }
	
    if(ioctl(sockfd,SIOCGIFNETMASK,&ifreq)<0)
    {
        perror("ioctl");
        return 0;
    }
	gv_netmask=inet_ntoa(((struct  sockaddr_in  *)&ifreq.ifr_addr)->sin_addr);
	puts("netmadk  is:");      
	puts(gv_netmask);
	
	close(sockfd);
    return gv_netmask;
}

int set_ip(char *ip, char *devname)
{
	struct ifreq ifreq;
	struct sockaddr_in ipaddr;
	int sockfd;

	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
	{
		perror("socket");
		return -1;
	}
	strcpy(ifreq.ifr_name, devname);
	if(ioctl(sockfd, SIOCGIFADDR, &ifreq) < 0)
	{
		perror("ioctl");
		return -2;
	}
	bcopy(&ifreq.ifr_addr, &ipaddr, sizeof(ifreq.ifr_addr));
	ipaddr.sin_addr.s_addr = inet_addr(ip);
	bcopy(&ipaddr, &ifreq.ifr_addr, sizeof(ipaddr));
	if(ioctl(sockfd, SIOCSIFADDR, &ifreq) < 0)
	{
		perror("ioctl");
		return -3;
	}
	close(sockfd);
	return 0;
}

int set_netmask(char *ip, char *devname)
{
    struct ifreq ifreq;
    struct sockaddr_in ipaddr;
    int sockfd;

    if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
    {
        perror("socket");
        return -1;
    }
    strcpy(ifreq.ifr_name,devname);
    if(ioctl(sockfd,SIOCGIFNETMASK,&ifreq)<0)
    {
        perror("ioctl");
        return -2;
    }
    bcopy(&ifreq.ifr_addr,&ipaddr,sizeof(ifreq.ifr_addr));
    ipaddr.sin_addr.s_addr=inet_addr(ip);
    bcopy(&ipaddr,&ifreq.ifr_addr,sizeof(ipaddr));
    if(ioctl(sockfd,SIOCSIFNETMASK,&ifreq)<0)
    {
        perror("ioctl");
        return -3;
    }
	close(sockfd);
    return 0;
}

⌨️ 快捷键说明

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