เช่นเดียวกับคำถามก่อนหน้าเกี่ยวกับการค้นหาชื่ออุปกรณ์เครือข่ายฉันต้องการได้รับรายชื่ออุปกรณ์ที่เชื่อถือได้ แต่เชื่อถือได้สำหรับอุปกรณ์ Wi-Fi เพื่อให้ดูเหมือนว่าขึ้นอยู่กับโครงสร้างการตั้งชื่อของคุณ:
wlan0
wlan1
หรือ
wlp5s0
wlp5s1
เช่นเดียวกับคำถามก่อนหน้าเกี่ยวกับการค้นหาชื่ออุปกรณ์เครือข่ายฉันต้องการได้รับรายชื่ออุปกรณ์ที่เชื่อถือได้ แต่เชื่อถือได้สำหรับอุปกรณ์ Wi-Fi เพื่อให้ดูเหมือนว่าขึ้นอยู่กับโครงสร้างการตั้งชื่อของคุณ:
wlan0
wlan1
หรือ
wlp5s0
wlp5s1
คำตอบ:
บน 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.
อย่างน้อยใน 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
รหัสพิมพ์สายอักขระคำก่อนลำไส้ใหญ่
หากคุณติดตั้ง 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
จากคำตอบของ 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
ทดสอบแบบสากล (ไม่ใช่รูท) บน Android 4, Android 7.1 และ Android 9 และ ArchLinux
ls /sys/class/ieee80211/*/device/net/