Linux网络配置代码
来源:互联网 发布:淘宝做图多少钱一张 编辑:程序博客网 时间:2024/05/21 20:30
Linux下 配置网络接口比较简单, IP地址,掩码,缺省网管用ioctl,DNS直接操作/etc/resolv.conf文件就可以了。
void interface_configure(const char* address, const char* netmask, const char* gateway, const char* dns1, const char* dns2){ ifreq ifr; sockaddr_in saddr; rtentry rte; sockaddr_in rtdst; sockaddr_in rtgw; char buffer[1024]; int fd = socket(AF_INET, SOCK_DGRAM, 0); if (fd == -1) { fprintf(stderr,"Failed to create socket: %s", strerror(errno)); return; } // Following operation eq. to 'ifconfig eth0 <address> netmask <netmask>' memset(&ifr, 0, sizeof(ifr)); strncpy(ifr.ifr_name, "eth0", IFNAMSIZ); memset(&saddr, 0, sizeof(saddr)); saddr.sin_family = AF_INET; inet_aton(address, &saddr.sin_addr); memcpy(&ifr.ifr_addr, &saddr, sizeof(saddr)); if (ioctl(fd, SIOCSIFADDR, &ifr) == -1) { fprintf(stderr, "Failed to set interface address %s: %s", address, strerror(errno)); return; } inet_aton(netmask, (sockaddr_in*)(&(ifr.ifr_netmask.sin_addr)); if (ioctl(fd, SIOCSIFNETMASK, &ifr) == -1) { fprintf(stderr, "Failed to set interface netmask %s: %s", netmask, strerror(errno)); return; } // route del default memset(&rte, 0, sizeof(rte)); rte.rt_flags = RTF_UP | RTF_GATEWAY; memset(&rtdst, 0, sizeof(rtdst)); rtdst.sin_family = AF_INET; memcpy(&rte.rt_dst, &rtdst, sizeof(rtdst)); while (1) { if (::ioctl(fd, SIOCDELRT, &rte) == -1) { if (errno != ESRCH) { fprintf(stderr, "Failed to delete gateway: %s", strerror(errno)); } break; } } // route add default gw <gatevay> memset(&rtgw, 0, sizeof(rtgw)); rtgw.sin_family = AF_INET; inet_aton(gateway, &rtgw.sin_addr); memcpy(&rte.rt_gateway, &rtgw, sizeof(rtgw)); if (ioctl(fd, SIOCADDRT, &rte) == -1) { fprintf(stderr, "Failed to add gateway %s: %s", gateway, strerror(errno)); } close(fd); // echo nameserver <dns1> > /etc/resolv.conf // echo nameserver <dns2> >> /etc/resolv.conf fd = creat("/etc/resolv.conf", 0666); if (fd == -1) { fprintf(stderr, "Failed to open /etc/resolv.conf %s", strerror(errno)); } else { if (dns1 != NULL) { snprintf(buffer, sizeof(buffer), "nameserver %s\n", dns1); write(fd, buffer, strlen(buffer)); } if (dns2 != NULL) { snprintf(buffer, sizeof(buffer), "nameserver %s\n", dns2); write(fd, buffer, strlen(buffer)); } close(fd); }}
- Linux网络配置代码
- Linux网络配置代码
- 网络 linux网络配置
- linux配置网络配置
- linux网络代码学习
- linux网络代码结构
- Linux网络代码
- Linux网络代码导读
- linux网络编程代码
- Linux网络基本网络配置
- 【网络】Linux网络相关配置
- Linux网络基本网络配置
- linux网络配置基础
- Linux网络配置
- 手动配置linux网络
- linux 网络配置
- linux 网络配置
- Linux网络配置
- About Jason.
- 标准标签库(JSTL)
- nginx负载均衡器处理session共享的几种方法
- Javascript之文件操作 (IE)
- 安装maven到Eclipse
- Linux网络配置代码
- mfc自定义消息机制学习总结
- jquery validate demo
- 在WebView上正确显示HTML内容
- 娱乐节目以及我们的价值取向
- 自己写的一个根据结点名称查找CTreeCtrl树中对应结点的方法(用的是递归思想)
- 【iphone游戏开发】Iphone游戏开发之五:游戏场景切换,点阵字的实现和Hiero工具的利用
- 鸟哥-笔记-说明
- mysqli 连接数据库