Wi-Fi 인터페이스 장치 이름 가져 오기 네트워크 장치 이름 찾기에

네트워크 장치 이름 찾기에 대한 이전 질문과 유사하게 Wi-Fi 장치에 대해서만 신뢰할 수있는 장치 이름 목록을 얻고 싶습니다. 명명 구조에 따라 다음과 같이 보입니다.

wlan0
wlan1

또는

wlp5s0
wlp5s1



답변

리눅스에서는 iw(무선 장치 및 해당 구성 표시 / 조작) dev명령을 사용할 때

Commands:
    dev
        List all network interfaces for wireless hardware.

그건

iw dev

당신은 다음과 같은 것을 얻을 것입니다 :

phy#0
    Interface wlan0
        ifindex 3
        wdev 0x1
        addr 00:12:32:e4:18:24
        type managed
phy#1
    Interface wlan1
        ifindex 4
        wdev 0x2
        addr 00:12:22:c6:b2:0a
        type managed

인터페이스 이름 만 추출하려면 항상 출력을 처리 할 수 ​​있습니다. 예 :

iw dev | awk '$1=="Interface"{print $2}'

도움말 페이지에는 다음과 같이 명확하게 명시되어 있습니다.

Do NOT screenscrape this tool, we don't consider its output stable.


답변

우분투 /proc/net/wireless에는 Wi-Fi 인터페이스에 대한 세부 정보가 들어 있는 파일이 있습니다. 나를 위해 어떤 출력 :

$ cat /proc/net/wireless
Inter-| sta-|   Quality        |   Discarded packets               | Missed | WE
 face | tus | link level noise |  nwid  crypt   frag  retry   misc | beacon | 22
wlp5s0: 0000   36.  -74.  -256        0      0      0     16  33004        0

약간 지저분하지만 장치 이름이 있습니다.

인터페이스 이름 만 얻으려면 :

cat /proc/net/wireless | perl -ne '/(\w+):/ && print $1'

perl코드는 콜론 앞에 단어 문자열을 인쇄합니다.


답변

sysfs가 / sys에 마운트되어 있으면 다음 명령이 작동합니다.

# find /sys/class/net -follow -maxdepth 2 -name wireless | cut -d / -f 5
wlan0
# find /sys/class/net -follow -maxdepth 2 -name phy80211 | cut -d / -f 5
wlan0

또는없이 find:

for dev in `ls /sys/class/net`; do
  if [ -d "/sys/class/net/$dev/wireless" ]; then echo $dev; fi;
done

첫 번째 발견 모든 장치에서 /sys/class/netA를 wireless(자세한 단지 무선 장치보다 수) 디렉토리와 호환 802.11이다 번째 발견 장치

커널 4.4에서 테스트


답변

Josh의 답변을 바탕으로 쉘 글롭을 사용하여 /sys/class/net디렉토리가있는 wireless디렉토리 를 식별 awk하고 장치 이름을 가져옵니다.

# find the directories
$ printf '%s\n' /sys/class/net/*/wireless # substitute with phy80211 if desired
/sys/class/net/wlp4s0/wireless
# filter out the "device" part
$ printf '%s\n' /sys/class/net/*/wireless | awk -F'/' '{ print $5 }'
wlp4s0


답변

Android 4, Android 7.1 및 Android 9 및 ArchLinux에서 범용 방식 (비 루트)으로 테스트되었습니다.

ls /sys/class/ieee80211/*/device/net/


답변