Nhận tên thiết bị giao diện Wi-Fi


Câu trả lời:


15

Trên linux bạn có iw(hiển thị / thao tác các thiết bị không dây và cấu hình của chúng) và khi được sử dụng với devlệnh:

Commands:
    dev
        List all network interfaces for wireless hardware.

đó là

iw dev

bạn sẽ nhận được một cái gì đó như:

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

Nếu bạn chỉ muốn trích xuất tên giao diện, bạn luôn có thể xử lý đầu ra, vd

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

chỉ cần ghi nhớ trang trợ giúp ghi rõ:

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

Tôi thích câu trả lời này, nó giải quyết vấn đề, nhưng một chút về việc không làm tôi lo lắng và khiến tôi nghĩ rằng có thể có một cách tốt hơn. Tôi muốn để mở này bây giờ.
Matt Copperwaite

9

Trên Ubuntu ít nhất, có /proc/net/wirelesstệp chứa thông tin chi tiết về giao diện Wi-Fi. Đầu ra nào cho tôi:

$ 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

Nó hơi lộn xộn nhưng tên thiết bị ở đó.

Để chỉ lấy tên giao diện:

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

Các perlđang in các chuỗi ký tự từ trước đại tràng.


Điều này không hoạt động đối với tôi, vì tôi đã vô hiệu hóa thẻ không dây (nhưng có thể phát hiện được).
thấm nhuần

9

Nếu bạn có sysfs được gắn tại / sys thì các lệnh sau sẽ hoạt động:

# 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

Hoặc, không có find:

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

Cái đầu tiên tìm thấy tất cả các thiết bị trong /sys/class/netmột wirelessthư mục (có thể không chỉ là thiết bị WiFi) và cái thứ hai tìm thấy các thiết bị tương thích với 802.11

Đã thử nghiệm trên kernel 4.4


7

Dựa trên câu trả lời của Josh , tôi sẽ sử dụng shell shell để xác định các /sys/class/netthư mục có wirelessthư mục bên trong và awkđể lấy tên thiết bị:

# 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

Cách phổ quát (không root) đã được thử nghiệm trên Android 4, Android 7.1 và Android 9 và ArchLinux.

ls /sys/class/ieee80211/*/device/net/
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.