公司开启连接网络设备认证后台架如何连接网络

Posted by shensunbo on July 29, 2026

IT 开启MAC 地址准入控制(MAC Authentication / MAC-based Access Control,但台架使用随机MAC地址和自己的笔记本使用USB转接器来连接网络,导致无法通过认证。

台架使用随机MAC

android台架使用随机MAC地址之后,每次连接WIFI的时候可能MAC地址都会变化,或者无法设置成本机的MAC地址,导致无法通过认证。可以使用脚本修改为固定的MAC地址,然后使用脚本进行网络连接,参考脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#!/usr/bin/env bash
set -euo pipefail

SSID="${OPENAI_WIFI_SSID:-Opus-Office}"
MAC="${OPENAI_WIFI_MAC:-00:08:22:bc:aa:fb}"
PASSWORD="${OPENAI_WIFI_PASSWORD:-}"
TIMEOUT_SECONDS="${OPENAI_WIFI_TIMEOUT:-30}"

if [[ -z "${PASSWORD}" ]]; then
  if [[ -t 0 ]]; then
    read -r -s -p "Password for ${SSID}: " PASSWORD
    printf '\n'
  else
    printf 'Set OPENAI_WIFI_PASSWORD before running this script.\n' >&2
    exit 2
  fi
fi

adb wait-for-device

printf 'Waiting for Android to finish booting...\n'
for ((i = 0; i < 60; i++)); do
  if [[ "$(adb shell getprop sys.boot_completed 2>/dev/null | tr -d '\r')" == "1" ]]; then
    break
  fi
  sleep 1
done

if [[ "$(adb shell getprop sys.boot_completed 2>/dev/null | tr -d '\r')" != "1" ]]; then
  printf 'Android did not finish booting within 60 seconds.\n' >&2
  exit 1
fi

printf 'Preparing Wi-Fi configuration...\n'
adb shell cmd wifi set-wifi-enabled disabled >/dev/null

# Remove the saved target so auto-join cannot race ahead with another MAC.
while read -r network_id; do
  [[ -n "${network_id}" ]] || continue
  adb shell cmd wifi forget-network "${network_id}" >/dev/null
done < <(
  adb shell cmd wifi list-networks |
    awk -v ssid="${SSID}" '$2 == ssid { print $1 }' |
    sort -u
)

adb shell settings put global wifi_connected_mac_randomization_enabled 0
adb shell settings put global wifi_scan_mac_randomization_enabled 0
adb shell cmd wifi force-overlay-config-value \
  bool config_wifi_connected_mac_randomization_supported enabled false >/dev/null

adb shell cmd wifi set-wifi-enabled enabled >/dev/null

printf 'Waiting for the Wi-Fi client interface...\n'
mac_set=false
for ((i = 0; i < 30; i++)); do
  status="$(adb shell cmd wifi status 2>/dev/null | tr -d '\r')"
  if grep -Fq 'iface=wlan0' <<<"${status}" &&
    adb shell su 0 ip link set dev wlan0 address "${MAC}" >/dev/null 2>&1; then
    actual_mac="$(
      adb shell cat /sys/class/net/wlan0/address 2>/dev/null |
        tr -d '\r' |
        tr '[:upper:]' '[:lower:]'
    )"
    if [[ "${actual_mac}" == "${MAC,,}" ]]; then
      mac_set=true
      break
    fi
  fi
  sleep 1
done

if [[ "${mac_set}" != "true" ]]; then
  printf 'Failed to set wlan0 MAC to %s.\n' "${MAC}" >&2
  exit 1
fi

printf 'Connecting to %s with MAC %s...\n' "${SSID}" "${MAC}"
adb shell cmd wifi connect-network "${SSID}" wpa2 "${PASSWORD}" -r none

for ((i = 0; i < TIMEOUT_SECONDS; i++)); do
  status="$(adb shell cmd wifi status 2>/dev/null | tr -d '\r')"
  if grep -Fq "Wifi is connected to \"${SSID}\"" <<<"${status}"; then
    current_mac="$(
      adb shell cat /sys/class/net/wlan0/address 2>/dev/null |
        tr -d '\r' |
        tr '[:upper:]' '[:lower:]'
    )"
    if [[ "${current_mac}" != "${MAC,,}" ]]; then
      printf 'Connected with unexpected MAC %s.\n' "${current_mac}" >&2
      exit 1
    fi

    ip_address="$(
      adb shell ip -4 -o addr show dev wlan0 2>/dev/null |
        awk '{print $4}' |
        tr -d '\r'
    )"
    printf 'Connected: SSID=%s MAC=%s IP=%s\n' \
      "${SSID}" "${current_mac}" "${ip_address:-unknown}"
    exit 0
  fi
  sleep 1
done

printf 'Connection timed out after %s seconds.\n' "${TIMEOUT_SECONDS}" >&2
adb shell cmd wifi status >&2
exit 1

笔记本使用转接器连接网络

USB转接器连接网络,使用的MAC地址是转接器的MAC地址,而不是笔记本的网卡的MAC地址,导致无法通过认证。需要修改笔记本的网卡的MAC地址为转接器的MAC地址,才能通过认证。

  • 查询网卡mac地址 ```bash ➜ ~ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000 link/ether 28:c5:c8:d5:d6:ac brd ff:ff:ff:ff:ff:ff altname enp3s0 4: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000 link/ether 98:bd:80:95:be:e2 brd ff:ff:ff:ff:ff:ff altname wlp0s20f3 26: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 66:5b:34:98:71:fd brd ff:ff:ff:ff:ff:ff
1
- 设置mac地址

sudo ip link set eno1 down sudo ip link set eth0 down sudo ip link set eth0 address 28:c5:c8:d5:d6:ac sudo ip link set eth0 up

- 设置之后的状态
```bash
➜  ~ ip link                   
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 28:c5:c8:d5:d6:ac brd ff:ff:ff:ff:ff:ff
    altname enp3s0
4: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
    link/ether 98:bd:80:95:be:e2 brd ff:ff:ff:ff:ff:ff
    altname wlp0s20f3
26: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 28:c5:c8:d5:d6:ac brd ff:ff:ff:ff:ff:ff