如何在C++ Linux應用程序中檢測網絡連接類型,即它是有線還是WiFi?如果設備有多個網絡接口,我想檢測所用接口的連接類型。 謝謝,在Linux中檢測網絡連接類型
4
A
回答
0
感謝您的所有投入。
的解決方案,我想出了:
得到所有活動接口從
/proc/net/dev
名和IP地址的映射IP地址得到當前的接口使用
檢查是否目前的接口是無線通過查看
/proc/net/wireless
0
1
如果接口存在於/ proc/net/wireless中,則它是無線接口。否則,它不是。
4
我一直在尋找這個答案。我在opensuse gitorious中發現了一段有趣的代碼。很顯然,他們使用下面的代碼來獲取接口類型:
get_iface_type() {
local IF=$1 TYPE
test -n "$IF" || return 1
test -d /sys/class/net/$IF || return 2
case "`cat /sys/class/net/$IF/type`" in
1)
TYPE=eth
# Ethernet, may also be wireless, ...
if test -d /sys/class/net/$IF/wireless -o \
-L /sys/class/net/$IF/phy80211 ; then
TYPE=wlan
elif test -d /sys/class/net/$IF/bridge ; then
TYPE=bridge
elif test -f /proc/net/vlan/$IF ; then
TYPE=vlan
elif test -d /sys/class/net/$IF/bonding ; then
TYPE=bond
elif test -f /sys/class/net/$IF/tun_flags ; then
TYPE=tap
elif test -d /sys/devices/virtual/net/$IF ; then
case $IF in
(dummy*) TYPE=dummy ;;
esac
fi
;;
24) TYPE=eth ;; # firewire ;; # IEEE 1394 IPv4 - RFC 2734
32) # InfiniBand
if test -d /sys/class/net/$IF/bonding ; then
TYPE=bond
elif test -d /sys/class/net/$IF/create_child ; then
TYPE=ib
else
TYPE=ibchild
fi
;;
512) TYPE=ppp ;;
768) TYPE=ipip ;; # IPIP tunnel
769) TYPE=ip6tnl ;; # IP6IP6 tunnel
772) TYPE=lo ;;
776) TYPE=sit ;; # sit0 device - IPv6-in-IPv4
778) TYPE=gre ;; # GRE over IP
783) TYPE=irda ;; # Linux-IrDA
801) TYPE=wlan_aux ;;
65534) TYPE=tun ;;
esac
# The following case statement still has to be replaced by something
# which does not rely on the interface names.
case $IF in
ippp*|isdn*) TYPE=isdn;;
mip6mnha*) TYPE=mip6mnha;;
esac
test -n "$TYPE" && echo $TYPE && return 0
return 3
}
我還是得找官方的文檔,以確認什麼/ SYS /班/ NET/$ IF /型手段的價值,但是這功能已經解釋了很多。
編輯:好吧,我已經讀了一些關於sysfs,並發現這是一個在屁股疼痛。我還沒有找到任何適當的文件。
如您所知,這些信息是從內核中提取出來的,以便在用戶空間中呈現。所以我最終在sysfs的源代碼和內核中尋找了解這個「type」屬性是什麼。我相信部分答案應該在net-sysfs.c以及linux/device.h中找到。我無法弄清楚這些東西是如何連接的。當我看到我需要了解所有這些宏時,我停下來......
相關問題
- 1. 更改linux的網絡連接類型
- 2. 檢測網絡連接
- 3. 在.NET中檢測3G網絡連接
- 4. 在Android上檢測網絡連接類型
- 5. 檢測Windows網絡類型
- 6. 在Android上檢測網絡連接?
- 7. 在C#中檢測網絡狀態(連接 - 斷開連接)
- 8. 檢測任何連接的網絡
- 9. 如何檢測網絡斷開連接?
- 10. 檢測任何連接網絡的人
- 11. 檢測網絡連接帶寬(Android)
- 12. Xcode 4.2檢測網絡連接
- 13. 可靠地檢查.Net中的網絡連接類型(Windows 7)
- 14. 檢測網絡服務器類型
- 15. 在android中的網絡連接檢查
- 16. 如何檢測互聯網在android熱點網絡連接
- 17. 檢查網絡連接
- 18. 檢查網絡連接
- 19. 檢查網絡連接android
- 20. 檢查網絡連接iPhone
- 21. 檢查網絡連接android
- 22. 在Android中檢測有限的網絡連接?
- 23. 在網站上檢測iPhone的連接類型?
- 24. 檢測一個MIDI接口連接在網絡MIDI API
- 25. 如何使用Windows API檢查網絡連接類型?
- 26. 如何使用C#在Windows中檢測網絡位置類型?
- 27. 如何在J2ME中檢測網絡類型(2G/3G)?
- 28. java - 在windows/linux上連接和斷開網絡連接
- 29. 檢測移動帶寬/連接類型
- 30. 網絡連接總是在手機上檢測到,即使沒有網絡
使用iwconfig獲取無線設備列表? – Zoredache 2010-12-17 22:52:45
謝謝。但是我想在C++應用程序中獲取信息。 – derekwei 2010-12-17 23:03:33
現在有一個[用於NetworkManager的DBUS API](http://projects.gnome.org/NetworkManager/developers/api/09/)可以使這個更容易。 – 2013-04-17 14:07:26