どのようにネットワーク接続の種類、つまり有線か無線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. uwp allicationでインターネット接続の種類を検出しますか?
- 2. JDBCの接続の種類
- 3. ピアツーピア接続の種類
- 4. WPF/XBAPアプリケーションからのネットワーク接続を検出しますか?
- 5. 顔の種類の検出
- 6. golangは2種類のデータベースを同時に接続します
- 7. jenkins:2種類のユーザー接続
- 8. 変更Linuxのネットワーク接続タイプ
- 9. ネットワークに接続している人を検出する
- 10. ビジュアルスタジオでネットワーク接続を検出するXamarinクラッシュアンドロイドアプリ
- 11. AndroidエミュレータはLinuxでネットワークに接続していません
- 12. 新しいネットワーク接続(linux-server)を検出し、それがJavaの状態である
- 13. 角度2のネットワーク接続をどのように検出できますか?
- 14. サーバーが接続されているネットワークの名前を検出します
- 15. リモートデスクトップ接続経由でサーバーに接続します。どのような種類のウェブホスティングですか?
- 16. 低速ネットワーク接続を検出して処理できません(WebServices)
- 17. 検索の種類
- 18. Outlookメールアドインでクライアントの種類を検出する
- 19. iOSネットワーク接続が検出されない
- 20. Alamofire 4:ネットワーク接続が検出されない
- 21. リレーショナルDB設計:異なる種類の「オブジェクト」を接続
- 22. アンドロイドのさまざまな種類のオーディオデバイスを検出して区別する
- 23. flex3アプリケーションへの接続SQLServerデータベースの種類
- 24. ネットワーク接続
- 25. ネットワーク接続
- 26. ZXingが検出するバーコードの種類を制限する
- 27. iPhoneの割り込みの種類を検出する
- 28. ブラウザの種類を検出する方法
- 29. Webサーバーの種類を検出する方法
iwconfigを使って無線デバイスのリストを取得する? – Zoredache
ありがとうございます。しかし、私はC++アプリケーションで情報を取得したいと思います。 – derekwei
これを簡単に行うために[NetworkManager用のDBUS API](http://projects.gnome.org/NetworkManager/developers/api/09/)があります。 –