我正在编写一个内核模块,它需要有关本地机器接口(interface)的信息,就像通过简单的“ifconfig”命令返回的接口(interface)一样,我已经搜索了很多,但找不到任何东西
最佳答案
您可以通过 struct net_device
以某种方式获取所有这些信息。
正如 Albert Veli 所说,您可以使用 __dev_get_by_name()
获取此 struct net_device
指针。
如果您告诉我们您具体需要哪些信息,我们甚至可以为您指明正确的字段。
查找 MAC 地址非常简单:
struct net_device *dev = __dev_get_by_name("eth0");
dev->dev_addr; // is the MAC address
dev->stats.rx_dropped; // RX dropped packets. (stats has more statistics)
找到 IP 地址比较困难,但并非不可能:
struct in_device *in_dev = rcu_dereference(dev->ip_ptr);
// in_dev has a list of IP addresses (because an interface can have multiple)
struct in_ifaddr *ifap;
for (ifap = in_dev->ifa_list; ifap != NULL;
ifap = ifap->ifa_next) {
ifap->ifa_address; // is the IPv4 address
}
(这些都没有经过编译测试,所以可能会出现拼写错误。)
关于linux - 是否有一个内核模块可以准确地返回简单的 'ifconfig' 的作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10124721/