3

単純な「ifconfig」コマンドによって返されるものと同じように、ローカルマシンのインターフェースに関する情報を必要とするカーネルモジュールを作成しています。それをたくさん検索しましたが、何も見つかりませんでした

4

2 に答える 2

6

何らかの方法ですべての情報を取得できますstruct net_device。Albert Veli が言ったように、このstruct net_deviceポインターは を使用して取得できます__dev_get_by_name()

特に必要な情報をお知らせいただければ、正しいフィールドをご案内できる場合もあります。

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
}

(これはいずれもコンパイル テストされていないため、タイプミスの可能性があります。)

于 2012-04-12T15:17:22.440 に答える
0

たとえば、アドレスを取得する方法については、in6_dump_addrs関数を参照してください。net/ipv6/addrconf.cリンク層アドレスなどのリンク プロパティについては、core/rtnetlink.c代わりに を参照してください。ifconfig とその ioctl は (Linux では) 廃止されているため、バグだらけになったプログラムの観点から考えないほうがよいでしょう。

于 2012-04-12T15:51:18.320 に答える