รับชื่ออุปกรณ์อินเตอร์เฟซ Wi-Fi


19

เช่นเดียวกับคำถามก่อนหน้าเกี่ยวกับการค้นหาชื่ออุปกรณ์เครือข่ายฉันต้องการได้รับรายชื่ออุปกรณ์ที่เชื่อถือได้ แต่เชื่อถือได้สำหรับอุปกรณ์ Wi-Fi เพื่อให้ดูเหมือนว่าขึ้นอยู่กับโครงสร้างการตั้งชื่อของคุณ:

wlan0
wlan1

หรือ

wlp5s0
wlp5s1

คำตอบ:


15

บน linux คุณมี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.

ฉันชอบคำตอบนี้มันแก้ปัญหาได้ แต่ส่วนน้อยเกี่ยวกับการไม่ขูดสนใจฉันและทำให้ฉันคิดว่าอาจจะมีวิธีที่ดีกว่า ฉันต้องการที่จะปล่อยให้เปิดในตอนนี้
แมตต์ Copperwaite

9

อย่างน้อยใน Ubuntu มี/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รหัสพิมพ์สายอักขระคำก่อนลำไส้ใหญ่


สิ่งนี้ไม่ได้ผลสำหรับฉัน - อาจเป็นเพราะฉันปิดการใช้งานการ์ดไร้สายของฉัน
imbuedHope

9

หากคุณติดตั้ง 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/netกับwirelessไดเรกทอรี (ซึ่งอาจจะมากกว่าเพียงแค่อุปกรณ์ WiFi) และครั้งที่สองพบอุปกรณ์ที่เข้ากันได้ 802.11

ทดสอบกับเคอร์เนล 4.4


7

จากคำตอบของ Joshฉันจะใช้ shell glob เพื่อระบุ/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

1

ทดสอบแบบสากล (ไม่ใช่รูท) บน Android 4, Android 7.1 และ Android 9 และ ArchLinux

ls /sys/class/ieee80211/*/device/net/
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.