Comment puis-je détecter le type de connexion réseau, par exemple, qu'il soit câblé ou Wi-Fi, dans une application C ++ Linux? P>
Si l'appareil dispose de plusieurs interfaces réseau, je souhaite détecter le type de connexion de l'interface utilisée. P>
Merci. P>
4 Réponses :
par l'interface utilisée, Eth ou WLAN. P>
Les noms des interfaces peuvent être modifiés et ne refléteront pas nécessairement leur type. Tentative d'actions sans fil sur eux (E.G. IwList Scan code>) pourrait être une meilleure approche - vérifier les capacités, pas les noms.
@CDHOWIE: Cela nécessite que l'utilisateur installe iwconfig de Wireless_Tools. Il serait préférable de trouver une solution sans dépendances. Vous pouvez affirmer que si vous utilisez un périphérique sans fil, vous avez besoin d'Iwconfig, mais ce n'est pas vrai: vous pouvez utiliser WPA_Supplicant, qui ne s'appuie pas sur Iwconfig pour travailler.
Si l'interface est présente dans / proc / net / réseau / sans fil, il s'agit d'une interface sans fil. Sinon, ce n'est pas. P>
Merci pour toutes les intrants. p>
La solution que je monte: p>
Obtenez toutes les interfaces actives 'noms et adresses IP de Obtenez l'interface actuelle en mappant l'adresse IP utilisée p> li>
Vérifiez si l'interface actuelle est sans fil en consultant / proc / net / dev code> p> li>
/ proc / net / sans fil code> p> li>
ol>
Je cherche aussi cette réponse. J'ai trouvé un code de code intéressant dans OpenSUSE Gitorious . Apparemment, ils utilisent la pièce de code suivante pour obtenir le type d'interface:
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 }
Ce sont des identifiants de type matériel ARP. Ils peuvent être trouvés dans if_arp.h .
C'est génial. Merci pour le conseil!
Utilisez iwconfig pour obtenir une liste de périphériques sans fil?
Merci. Cependant, je voudrais obtenir les informations dans une application C ++.
Maintenant, il y a un API DBUS pour NetworkManager pour faciliter considérablement la tâche.