どのようにネットワーク接続の種類、つまり有線か無線LANかをC++ Linuxアプリケーションで検出できますか?デバイスに複数のネットワークインターフェイスがある場合は、使用するインターフェイスの接続タイプを検出したいと考えています。 ありがとう、Linuxでネットワーク接続の種類を検出します。
答えて
すべての入力をありがとう。
私が思い付くソリューション:
は
/proc/net/dev
からすべてのアクティブインターフェイスの名前とIPアドレスを取得したIPアドレスをマッピングすることで、現在のインターフェイスを取得するかどうかを
チェックを使用現在のインターフェイスは、見て無線です。
/proc/net/wireless
使用されているインターフェイスで、ethまたはwlan。
インターフェイスの名前は変更される可能性があり、必ずしもそのタイプを反映しているとは限りません。ワイヤレスアクションを試すこと(例: 'iwlist scan')はより良いアプローチかもしれません - 名前ではなく機能をチェックしてください。 – cdhowie
@cdhowie:これにより、ユーザはwireless_toolsからiwconfigをインストールする必要があります。依存関係のないソリューションを見つける方が良いでしょう。ワイヤレスデバイスを使用する場合、iwconfigが必要だと主張することはできますが、それは真実ではありません:iwconfigに依存しないwpa_supplicantを使用することができます。 – user48678
インターフェイスが/ proc/net/wirelessに存在する場合は、ワイヤレスインターフェイスです。それ以外の場合は、そうではありません。
私はその答えも探していました。私は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 /クラス/ネット/ $型手段/ IFが、これを確認するために、公式ドキュメントを見つけなければなりません関数はすでに多く説明しています。
EDIT:ok、私はもう少しsysfsについて読んだことがありますが、そのことはお尻の痛みです。私は適切な文書が見つかりませんでした。
この情報は、ユーザスペースに表示されるようにカーネルから引き出されています。だから私はsysfsとカーネルのソースを調べて、この "タイプ"属性が何であるかを理解しました。答えの一部はnet-sysfs.cとlinux/device.hにあるはずです。私はちょうどこのものがどのように結びついているのか理解できません。これらのマクロをすべて理解する必要があることがわかったときに私は止まった。
- 1. ピアツーピア接続の種類
- 2. WPF/XBAPアプリケーションからのネットワーク接続を検出しますか?
- 3. 顔の種類の検出
- 4. 変更Linuxのネットワーク接続タイプ
- 5. 新しいネットワーク接続(linux-server)を検出し、それがJavaの状態である
- 6. サーバーが接続されているネットワークの名前を検出します
- 7. iOSネットワーク接続が検出されない
- 8. リレーショナルDB設計:異なる種類の「オブジェクト」を接続
- 9. ネットワーク接続
- 10. flex3アプリケーションへの接続SQLServerデータベースの種類
- 11. ZXingが検出するバーコードの種類を制限する
- 12. iPhoneの割り込みの種類を検出する
- 13. Webサーバーの種類を検出する方法
- 14. データベースの種類を検出する方法は?
- 15. Window Mobileでキーボードの種類を検出する方法はありますか?
- 16. ネットワークのトラブルシューティングを検出しますか?
- 17. ネットワーク接続マップR
- 18. localhostへの接続はネットワークに出ますか?
- 19. リモートデスクトップ接続の検出
- 20. PHPでブラウザの接続を検出しました
- 21. Lidgrenネットワーク、接続できません
- 22. Androidアプリケーションでネットワーク接続を再接続するには?
- 23. 私は使用している接続の種類を検出する方法はありますか? WiFi、3Gまたはイーサネット?
- 24. 20種類のシェイプを1つの 'OnMouseDown'に接続するには?
- 25. Silverlightクライアントによるディスプレイデバイス(モニタ/プロジェクタ)の種類の検出
- 26. WinPEでAC電源接続を検出していますか?
- 27. ネットワーク接続用のテスト/トラブルシューティングツール?
- 28. Windows Mobileのネットワーク接続リスナー
- 29. ネットワーク接続のコントロール合計
- 30. ネットワーク接続の警告
iwconfigを使って無線デバイスのリストを取得する? – Zoredache
ありがとうございます。しかし、私はC++アプリケーションで情報を取得したいと思います。 – derekwei
これを簡単に行うために[NetworkManager用のDBUS API](http://projects.gnome.org/NetworkManager/developers/api/09/)があります。 –