어떻게 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 수단의 값하지만,이 함수는 이미 많은 것을 설명합니다.
편집 : 좋아요, sysfs에 대해 조금 더 읽었습니다. 알아 내면 엉덩이에 통증이 있습니다. 나는 적절한 문서를 찾지 못했습니다.
이 정보는 사용자 공간에 표시되기 위해 커널에서 가져온 것입니다. 그래서 나는이 "type"속성이 무엇인지를 이해하기 위해 sysfs의 소스와 커널을 조사했다. 그 대답의 일부는 net-sysfs.c, 그리고 linux/device.h에서 찾아야한다고 생각합니다. 나는이 물건들이 어떻게 연결되는지를 단지 알 수 없다. 나는이 매크로들을 모두 이해할 필요가 있다는 것을 알았을 때 멈췄다. ...
- 1. Linux의 네트워크 연결 테스트 자동화 스크립트
- 2. NSUrlConnection의 연결 문제를 감지하십시오.
- 3. asp.net에서 네트워크 카드 ID를 감지하십시오.
- 4. Blackberry에서 네트워크 연결 유형을 확인하는 방법은 무엇입니까?
- 5. iPhone에서 네트워크 연결 유형을 제어 할 수 있습니까?
- 6. Windows API를 사용하여 네트워크 연결 유형을 어떻게 확인할 수 있습니까?
- 7. 네트워크 프로그래밍에서 Windows와 Linux의 차이점은 무엇입니까?
- 8. 네트워크 연결 속도 결정
- 9. 가상 네트워크 연결
- 10. 네트워크 연결 수
- 11. 블랙 베리 네트워크 연결
- 12. 사파리로 네트워크 공유에 연결
- 13. 자바 애플릿 네트워크 연결
- 14. 위치 배경 - 네트워크 연결
- 15. 는 네트워크 연결
- 16. glib 네트워크 연결 예
- 17. C++에서 네트워크 연결
- 18. 네트워크 연결 확인 iPhone
- 19. System.Net.Sockets.TcpClient를 사용한 네트워크 연결
- 20. 위치 배경 - 네트워크 연결
- 21. 애플릿 간의 네트워크 연결
- 22. 들어오는 네트워크 연결 지연
- 23. j2me 네트워크 연결
- 24. iPhone의 네트워크 연결 가능성
- 25. 네트워크 연결 경고
- 26. 고속 네트워크 연결 시뮬레이션
- 27. (이더넷) 에뮬레이터에서 네트워크 연결 및 연결 해제
- 28. 리눅스에서로드 된 시스템의 NIC 및 포트를 감지하십시오.
- 29. GNU/Linux의 승인 보류중인 연결 대기열 크기 알아보기
- 30. 타이머로 iPhone 배경 네트워크 연결
iwconfig를 사용하여 무선 장치 목록을 얻으시겠습니까? – Zoredache
감사합니다. 그러나 C++ 응용 프로그램에서 정보를 얻고 싶습니다. – derekwei
이제는이 작업을 훨씬 쉽게하기 위해 [NetworkManager 용 DBUS API] (http://projects.gnome.org/NetworkManager/developers/api/09/)가 있습니다. –