博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(笔记)Linux下C语言实现静态IP地址,掩码,网关的设置
阅读量:6679 次
发布时间:2019-06-25

本文共 1443 字,大约阅读时间需要 4 分钟。

#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>
#include <error.h>
#include <net/route.h>
 
int SetIfAddr(char *ifname, char *Ipaddr, char *mask,char *gateway)
{
    int fd;
    int rc;
    struct ifreq ifr;
    struct sockaddr_in *sin;
    struct rtentry  rt;
   
    fd = socket(AF_INET, SOCK_DGRAM, 0);
    if(fd < 0)
    {
            perror("socket   error");    
            return -1;    
    }
    memset(&ifr,0,sizeof(ifr));
    strcpy(ifr.ifr_name,ifname);
    sin = (struct sockaddr_in*)&ifr.ifr_addr;    
    sin->sin_family = AF_INET;  
  
    //ipaddr
    if(inet_aton(Ipaddr,&(sin->sin_addr)) < 0)  
    {    
        perror("inet_aton   error");    
        return -2;    
    }   
   
    if(ioctl(fd,SIOCSIFADDR,&ifr) < 0)  
    {    
        perror("ioctl   SIOCSIFADDR   error");    
        return -3;    
    }
    //netmask
    if(inet_aton(mask,&(sin->sin_addr)) < 0)  
    {    
        perror("inet_pton   error");    
        return -4;    
    }   
    if(ioctl(fd, SIOCSIFNETMASK, &ifr) < 0)
    {
        perror("ioctl");
        return -5;
    }
    //gateway
    memset(&rt, 0, sizeof(struct rtentry));
    memset(sin, 0, sizeof(struct sockaddr_in));
    sin->sin_family = AF_INET;
    sin->sin_port = 0;
    if(inet_aton(gateway, &sin->sin_addr)<0)
    {
       printf ( "inet_aton error\n" );
    }
    memcpy ( &rt.rt_gateway, sin, sizeof(struct sockaddr_in));
    ((struct sockaddr_in *)&rt.rt_dst)->sin_family=AF_INET;
    ((struct sockaddr_in *)&rt.rt_genmask)->sin_family=AF_INET;
    rt.rt_flags = RTF_GATEWAY;
    if (ioctl(fd, SIOCADDRT, &rt)<0)
    {
        zError( "ioctl(SIOCADDRT) error in set_default_route\n");
        close(fd);
        return -1;
    }
    close(fd);
    return rc;

}

转载地址:http://tinao.baihongyu.com/

你可能感兴趣的文章
day28 classmethod 装饰器
查看>>
jquery 实现弹出框 打开与关闭
查看>>
LESS 学习整理总结
查看>>
QName
查看>>
LeetCode OJ:Reverse Linked List II(反转链表II)
查看>>
LeetCode OJ:Binary Tree Zigzag Level Order Traversal(折叠二叉树遍历)
查看>>
海量数据、高并发优化方案
查看>>
会计的思考(35):会计数据之殇
查看>>
10多媒体
查看>>
分布式一致性协议
查看>>
day10-mysql
查看>>
脑洞大开——我理解的编程模式
查看>>
项目总结07:JS图片的上传预览和表单提交(FileReader()方法)
查看>>
Linux中各种进程显示和默认端口
查看>>
Java使用线程并发库模拟弹夹装弹以及发射子弹的过程
查看>>
android 利用SimpleDateFormat格式化时间不准确的问题
查看>>
盘点互联网巨头奉献的十大开源安全工具[转]
查看>>
FileUtils工具类的使用
查看>>
程序员找不女朋友的原因
查看>>
react-router中的路由钩子使用
查看>>