当前位置: 技术问答>linux和unix
如何用C程序获取和设置本地IP、网关、及掩码。
来源: 互联网 发布时间:2015-12-01
本文导语: 要使用C语言获取网卡信息,及对网卡信息进行设置,包括IP地址,网关、子网掩码,用事么方法比较方便一点。 | 你可以strace route -n就知道如何做了 我的结果是这样的 open("/proc/net/route", O_R...
要使用C语言获取网卡信息,及对网卡信息进行设置,包括IP地址,网关、子网掩码,用事么方法比较方便一点。
|
你可以strace route -n就知道如何做了
我的结果是这样的
open("/proc/net/route", O_RDONLY) = 3
//.....
说明route -n 是读取的/proc/net/route这个文件来得到网关的
/proc/net/route文件具体的格式可以man proc来看
至于设置gateway就稍微复杂些,
struct rtentry rt;
ioctl(sockfd, SIOCADDRT, &rt)
其中struct rtentry在/usr/include/linux/route.h定义
我的结果是这样的
open("/proc/net/route", O_RDONLY) = 3
//.....
说明route -n 是读取的/proc/net/route这个文件来得到网关的
/proc/net/route文件具体的格式可以man proc来看
至于设置gateway就稍微复杂些,
struct rtentry rt;
ioctl(sockfd, SIOCADDRT, &rt)
其中struct rtentry在/usr/include/linux/route.h定义
|
unsigned long do_ioctl_get_ipaddress(char *dev)
{
struct ifreq ifr;
int fd;
int err;
unsigned long ip;
unsigned long myip;
struct in_addr tmp_addr;
int i=0;
strcpy(ifr.ifr_name, dev);
fd = socket(AF_INET, SOCK_DGRAM, 0);
err = ioctl(fd, SIOCGIFADDR, &ifr);
if (err) {
perror("ioctl");
return 0;
}
close(fd);
memcpy(&ip,ifr.ifr_addr.sa_data + 2,4);
myip = ip;
tmp_addr.s_addr=myip;
return myip;
}