主题 : 如何获取 ARM9-linux 的IP地址、MAC码、网关、子网掩码 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 5721
精华: 0
发帖: 51
金钱: 275 两
威望: 72 点
综合积分: 102 分
注册时间: 2009-05-06
最后登录: 2017-09-13
楼主  发表于: 2010-06-09 11:06

 如何获取 ARM9-linux 的IP地址、MAC码、网关、子网掩码

请问:
如何获取 ARM9-linux 的IP地址、MAC码、网关、子网掩码
就是雷同于命令ifconfig所显示的信息。
若使用QT编程,如何获取以上信息?

尝试用 QNetworkInterface类, 但还是不能将每个网络适配名下 IP地址、MAC码、网关、子网掩码
一起获得。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2010-06-09 12:25
这些东西可以通过socket上的ioctl()系统调用获得,附件里是我用strace工具追踪PC上的ifconfig eth0的输出,注意看其中ioctl的部分:

socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
..
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 5
...
ioctl(5, SIOCGIFFLAGS, {ifr_name="eth0", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0
ioctl(5, SIOCGIFHWADDR, {ifr_name="eth0", ifr_hwaddr=00:1c:c4:1f:01:99}) = 0
ioctl(5, SIOCGIFMETRIC, {ifr_name="eth0", ifr_metric=0}) = 0
ioctl(5, SIOCGIFMTU, {ifr_name="eth0", ifr_mtu=1500}) = 0
ioctl(5, SIOCGIFMAP, {ifr_name="eth0", ifr_map={mem_start=0, mem_end=0, base_addr=0, irq=17, dma=0, port=0}}) = 0
ioctl(5, SIOCGIFMAP, {ifr_name="eth0", ifr_map={mem_start=0, mem_end=0, base_addr=0, irq=17, dma=0, port=0}}) = 0
ioctl(5, SIOCGIFTXQLEN, {ifr_name="eth0", ifr_qlen=1000}) = 0
...
ioctl(4, SIOCGIFADDR, {ifr_name="eth0", ifr_addr={AF_INET, inet_addr("16.157.12.196")}}) = 0
ioctl(4, SIOCGIFDSTADDR, {ifr_name="eth0", ifr_dstaddr={AF_INET, inet_addr("16.157.12.196")}}) = 0
ioctl(4, SIOCGIFBRDADDR, {ifr_name="eth0", ifr_broadaddr={AF_INET, inet_addr("16.157.15.255")}}) = 0
ioctl(4, SIOCGIFNETMASK, {ifr_name="eth0", ifr_netmask={AF_INET, inet_addr("255.255.248.0")}}) = 0
附件: ifconfig.zip (3 K) 下载次数:59
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 侠客
UID: 5721
精华: 0
发帖: 51
金钱: 275 两
威望: 72 点
综合积分: 102 分
注册时间: 2009-05-06
最后登录: 2017-09-13
2楼  发表于: 2010-06-09 13:07
先谢过 kasim

然后在看看能否使用