linux 下 获得本机ip地址,linux下编程实现获取本机ip地址的分配方式

如题!!!

可不可以编程来获取本机的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工具获取地址,好像没有其他地方保留此类信息。

|

内核的网络部分是不是可以做文章阿

|

不懂 帮顶

|

ifconfig

命令可以得到本机所有的网络适配器和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地址的时候,查看你的配置,根据你的配置,采用相应的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值