当前位置: 技术问答>linux和unix
linux下编程实现获取本机ip地址的分配方式
来源: 互联网 发布时间:2016-07-25
本文导语: 如题!!! 可不可以编程来获取本机的ip地址的分配方式??? 我自己找了很久,发现没什么好的方法,所以想请大牛指教!多谢了 如果实在不行,是不是在/etc目录下有个文件存了有关本机网络的配置,可不可以...
如题!!!
可不可以编程来获取本机的ip地址的分配方式???
我自己找了很久,发现没什么好的方法,所以想请大牛指教!多谢了
如果实在不行,是不是在/etc目录下有个文件存了有关本机网络的配置,可不可以分析这个文件从中
找出ip地址分配方式是static还是dynamic的???
多谢了!!!
可不可以编程来获取本机的ip地址的分配方式???
我自己找了很久,发现没什么好的方法,所以想请大牛指教!多谢了
如果实在不行,是不是在/etc目录下有个文件存了有关本机网络的配置,可不可以分析这个文件从中
找出ip地址分配方式是static还是dynamic的???
多谢了!!!
|
直接找配置文件吧。。。
|
估计只能使用解析网络接口配置文件来获取。
Redhat或CentOS上,网络启动(也就是调用/etc/init.d/network脚本),对于以太网口,最终会调用/etc/sysconfig/network-scripts/ifup-eth脚本,它会解析网络接口的配置文件(如/etc/sysconfig/network-scripts/ifcfg-eth0),根据文件中BOOTPROTO字段决定如何设置ip,如果是dhcp,则会调用dhclient工具获取地址,好像没有其他地方保留此类信息。
Redhat或CentOS上,网络启动(也就是调用/etc/init.d/network脚本),对于以太网口,最终会调用/etc/sysconfig/network-scripts/ifup-eth脚本,它会解析网络接口的配置文件(如/etc/sysconfig/network-scripts/ifcfg-eth0),根据文件中BOOTPROTO字段决定如何设置ip,如果是dhcp,则会调用dhclient工具获取地址,好像没有其他地方保留此类信息。
|
内核的网络部分是不是可以做文章阿
|
不懂 帮顶
|
ifconfig
命令可以得到本机所有的网络适配器和IP地址分配情况
不过比较复杂,需要分析
命令可以得到本机所有的网络适配器和IP地址分配情况
不过比较复杂,需要分析
|
/*
在Unix和Linux系统下有两种方法可以获得系统IP地址(gethostbyname和ioctl)
gethostbyname通过域名解析获取对应计算机的网络地址,ioctl是一系列的网络函数获得本机的IP
(推荐使用ioctl方法,这个方法能给出的ip与ifconfig命令显示的ip一致,并且能不经修改的在arm板上正常运行。
而 gethostname()联合gethostbyname()方法给出的ip与ifconfig给出的并不一致,无法使用[还不懂为什么],并且在 arm板上不能正确运行。)
ioctl范例程序
*/
#include
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
int s;
struct ifconf conf;
struct ifreq *ifr;
char buff[BUFSIZ];
int num;
int i;
s = socket(PF_INET, SOCK_DGRAM, 0);
conf.ifc_len = BUFSIZ;
conf.ifc_buf = buff;
ioctl(s, SIOCGIFCONF, &conf);
num = conf.ifc_len / sizeof(struct ifreq);
ifr = conf.ifc_req;
for(i=0;i ifr_addr);
ioctl(s, SIOCGIFFLAGS, ifr);
if(((ifr->ifr_flags & IFF_LOOPBACK) == 0) && (ifr->ifr_flags & IFF_UP))
{
printf("%s (%s)n",
ifr->ifr_name,
inet_ntoa(sin->sin_addr));
}
ifr++;
}
}
|
我是这样理解的, 内核提供了获取IP的方式, 但是,它并不关心你采用什么方式。 只是在你需要得到IP地址的时候,查看你的配置,根据你的配置,采用相应的方式