我正在寫大概需要本地計算機的接口,就像通過一個簡單的「使用ifconfig」命令重新調校的那些信息的內核模塊,我已經搜查了很多的,但找不到任何有沒有一個內核模塊能夠返回一個簡單的'ifconfig'呢?
2
A
回答
5
你可以通過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 = ifa1->ifa_next) {
ifap->ifa_address; // is the IPv4 address
}
(所有這些是不編譯測試,所以錯別字是可能)
+0
好吧,我想獲得接口的IP地址,MAC地址,狀態,錯誤的數據包數量和丟失的數據包,並且有什麼方法可以在此接口上獲得鏈接的速度或帶寬? – 2012-04-12 15:40:58
0
例如,請參閱函數net/ipv6/addrconf.c
以瞭解如何獲取地址。對於鏈接屬性,如鏈接層地址,請參見core/rtnetlink.c
。 ifconfig及其ioctls已經過時(在Linux上),所以最好不要認爲現在是bug瀰漫的程序。
相關問題
- 1. 有沒有一個libnfc android可加載內核模塊?
- 2. 從活動中返回一個值 - 有沒有一個好的做法呢?
- 3. 有沒有辦法簡單地返回一個BlockingCollection
- 4. 有一個簡單的JavaScript滑塊嗎?
- 5. 有沒有像返回一個函數?
- 6. 一個模塊中的功能,我進口的回報有沒有定義
- 7. 如何建立一個內核模塊
- 8. XSL-FO - 空塊元素有一個很簡單的模板
- 9. 是否有一個ruby方法只返回一個塊的值?
- 10. 如何在沒有DAL的情況下創建一個簡單的Dotnetnuke模塊
- 11. 如何使一個Linux內核模塊依賴於具有depmod的另一個外部模塊?
- 12. PHP mt_rand沒有返回一個整數
- 13. 返回一個NSArray沒有泄漏?
- 14. 做一個簡單的wxWidgets程序沒有內存泄漏
- 15. 有沒有做一個特定的線程中的OpenCL內核
- 16. 不能讓這個(簡單)遞歸函數返回一個值
- 17. 有沒有人有一個單一的ContentPresenter UserControl的簡單例子?
- 18. 功能沒有定義,返回一個匿名功能
- 19. 檢查數整除9沒有一個簡單的模
- 20. 只返回最後一個內容塊
- 21. Clojure的 - 功能沒有返回一個懶惰的序列
- 22. 是否有可能結束一個像返回類似的Python模塊導入?
- 23. 從模塊返回一個類實例?
- 24. JTable中沒有返回的最後一個單元格的值
- 25. PHP有一個「模塊」類
- 26. 有沒有成功的一個行塊
- 27. 爲什麼這個簡單的PHP沒有返回響應?
- 28. 返回一個空集時,LINQ的地方沒有返回
- 29. get_current()在這個內核模塊中返回什麼?
- 30. 我在函數內的第一個返回值沒有返回任何東西
檢查ifconfig的源代碼並查看它的作用(或者使用strace進行檢查),然後檢查Linux內核源代碼,瞭解執行這些系統調用時網絡驅動程序的功能。例如ioctl SIOCGIFHWADDR,SIOCGIFADDR等。 – 2012-04-12 13:41:45
例如,檢查net/core/dev.c函數__dev_get_by_name()看起來很有趣。你可以使用它並從返回的結構中獲取關於接口的一些信息。 – 2012-04-12 13:49:45