Linux网络配置代码
2011-11-14 14:49
218 查看
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协议栈代码阅读笔记(二)网络接口的配置
- 传智播客c/c++公开课学习笔记--Linux网络流媒体服务器的核心代码揭秘
- linux虚拟机网络配置及Linux软件安装
- linux 配置网络
- Linux网络相关配置文件
- Linux 虚拟机 virtualBox 网络配置 NAT SSH
- Linux系统之ks脚本安装虚拟机与dhcp网络配置
- Linux基本网络配置
- linux网络配置
- Linux系统中网络配置详解
- Linux网络配置
- Linux网络服务器配置基础
- Linux网络接口配置文件ifcfg-eth0解析
- linux网络配置命令总结
- linux下简单的网络配置命令
- Linux的网络配置(虚拟机安装redhat版本系统)
- linux网络配置(关于connect: network is unreachable)(网上转贴)
- linux下的基本网络配置