mirror of
https://github.com/bin456789/reinstall.git
synced 2025-01-19 04:49:13 +08:00
修复脚本无法获取部分移动云电脑的 IP
移动云电脑第一条默认路由是 VPN 网卡,其 MAC 为空,通过此特征进行排除
This commit is contained in:
parent
c682835af6
commit
5b0cf3df1a
@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
[![Codacy](https://img.shields.io/codacy/grade/dc679a17751448628fe6d8ac35e26eed?logo=Codacy&label=Codacy)](https://app.codacy.com/gh/bin456789/reinstall/dashboard)
|
[![Codacy](https://img.shields.io/codacy/grade/dc679a17751448628fe6d8ac35e26eed?logo=Codacy&label=Codacy)](https://app.codacy.com/gh/bin456789/reinstall/dashboard)
|
||||||
[![CodeFactor](https://img.shields.io/codefactor/grade/github/bin456789/reinstall?logo=CodeFactor&logoColor=white&label=CodeFactor)](https://www.codefactor.io/repository/github/bin456789/reinstall)
|
[![CodeFactor](https://img.shields.io/codefactor/grade/github/bin456789/reinstall?logo=CodeFactor&logoColor=white&label=CodeFactor)](https://www.codefactor.io/repository/github/bin456789/reinstall)
|
||||||
[![Lines of Code](https://tokei.rs/b1/github/bin456789/reinstall?category=code&style=flat&label=Lines%20of%20Code)](https://github.com/XAMPPRocky/tokei_rs)
|
[![Lines of Code](https://aschey.tech/tokei/github/bin456789/reinstall?category=code&label=Lines%20of%20Code)](https://github.com/aschey/vercel-tokei)
|
||||||
|
<!-- [![Lines of Code](https://tokei.rs/b1/github/bin456789/reinstall?category=code&style=flat&label=Lines%20of%20Code)](https://github.com/XAMPPRocky/tokei_rs) -->
|
||||||
|
|
||||||
Reinstall server with one-click [中文](README.md)
|
Reinstall server with one-click [中文](README.md)
|
||||||
|
|
||||||
|
@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
[![Codacy](https://img.shields.io/codacy/grade/dc679a17751448628fe6d8ac35e26eed?logo=Codacy&label=Codacy)](https://app.codacy.com/gh/bin456789/reinstall/dashboard)
|
[![Codacy](https://img.shields.io/codacy/grade/dc679a17751448628fe6d8ac35e26eed?logo=Codacy&label=Codacy)](https://app.codacy.com/gh/bin456789/reinstall/dashboard)
|
||||||
[![CodeFactor](https://img.shields.io/codefactor/grade/github/bin456789/reinstall?logo=CodeFactor&logoColor=white&label=CodeFactor)](https://www.codefactor.io/repository/github/bin456789/reinstall)
|
[![CodeFactor](https://img.shields.io/codefactor/grade/github/bin456789/reinstall?logo=CodeFactor&logoColor=white&label=CodeFactor)](https://www.codefactor.io/repository/github/bin456789/reinstall)
|
||||||
[![Lines of Code](https://tokei.rs/b1/github/bin456789/reinstall?category=code&style=flat&label=Lines%20of%20Code)](https://github.com/XAMPPRocky/tokei_rs)
|
[![Lines of Code](https://aschey.tech/tokei/github/bin456789/reinstall?category=code&label=Lines%20of%20Code)](https://github.com/aschey/vercel-tokei)
|
||||||
|
<!-- [![Lines of Code](https://tokei.rs/b1/github/bin456789/reinstall?category=code&style=flat&label=Lines%20of%20Code)](https://github.com/XAMPPRocky/tokei_rs) -->
|
||||||
|
|
||||||
一键重装脚本 [English](README.en.md)
|
一键重装脚本 [English](README.en.md)
|
||||||
|
|
||||||
|
@ -26,9 +26,9 @@ fi
|
|||||||
# debian 12 initrd 没有 xargs
|
# debian 12 initrd 没有 xargs
|
||||||
get_ethx() {
|
get_ethx() {
|
||||||
if false; then
|
if false; then
|
||||||
ip -o link | grep "$mac_addr" | awk '{print $2}' | cut -d: -f1
|
ip -o link | grep -i "$mac_addr" | awk '{print $2}' | cut -d: -f1
|
||||||
else
|
else
|
||||||
ip -o link | grep "$mac_addr" | cut -d' ' -f2 | cut -d: -f1
|
ip -o link | grep -i "$mac_addr" | cut -d' ' -f2 | cut -d: -f1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
174
reinstall.sh
174
reinstall.sh
@ -1547,6 +1547,14 @@ find_main_disk() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_found_ipv4_netconf() {
|
||||||
|
[ -n "$ipv4_mac" ] && [ -n "$ipv4_addr" ] && [ -n "$ipv4_gateway" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
is_found_ipv6_netconf() {
|
||||||
|
[ -n "$ipv6_mac" ] && [ -n "$ipv6_addr" ] && [ -n "$ipv6_gateway" ]
|
||||||
|
}
|
||||||
|
|
||||||
# TODO: 单网卡多IP
|
# TODO: 单网卡多IP
|
||||||
collect_netconf() {
|
collect_netconf() {
|
||||||
if is_in_windows; then
|
if is_in_windows; then
|
||||||
@ -1564,82 +1572,116 @@ collect_netconf() {
|
|||||||
# 否 手动 0 0.0.0.0/0 19 192.168.1.1
|
# 否 手动 0 0.0.0.0/0 19 192.168.1.1
|
||||||
# 否 手动 0 0.0.0.0/0 59 nekoray-tun
|
# 否 手动 0 0.0.0.0/0 59 nekoray-tun
|
||||||
|
|
||||||
|
# wmic nic:
|
||||||
|
# 真实网卡
|
||||||
|
# AdapterType=以太网 802.3
|
||||||
|
# AdapterTypeId=0
|
||||||
|
# MACAddress=68:EC:C5:11:11:11
|
||||||
|
# PhysicalAdapter=TRUE
|
||||||
|
# PNPDeviceID=PCI\VEN_8086&DEV_095A&SUBSYS_94108086&REV_61\4&295A4BD&1&00E0
|
||||||
|
|
||||||
|
# VPN tun 网卡,部分移动云电脑也有
|
||||||
|
# AdapterType=
|
||||||
|
# AdapterTypeId=
|
||||||
|
# MACAddress=
|
||||||
|
# PhysicalAdapter=TRUE
|
||||||
|
# PNPDeviceID=SWD\WINTUN\{6A460D48-FB76-6C3F-A47D-EF97D3DC6B0E}
|
||||||
|
|
||||||
|
# VMware 网卡
|
||||||
|
# AdapterType=以太网 802.3
|
||||||
|
# AdapterTypeId=0
|
||||||
|
# MACAddress=00:50:56:C0:00:08
|
||||||
|
# PhysicalAdapter=TRUE
|
||||||
|
# PNPDeviceID=ROOT\VMWARE\0001
|
||||||
|
|
||||||
for v in 4 6; do
|
for v in 4 6; do
|
||||||
if [ "$v" = 4 ]; then
|
if [ "$v" = 4 ]; then
|
||||||
# 或者 route print
|
# 或者 route print
|
||||||
route=$(netsh int ipv4 show route | awk '$4 == "0.0.0.0/0"' | head -1 | del_cr)
|
routes=$(netsh int ipv4 show route | awk '$4 == "0.0.0.0/0"' | del_cr)
|
||||||
else
|
else
|
||||||
route=$(netsh int ipv6 show route | awk '$4 == "::/0"' | head -1 | del_cr)
|
routes=$(netsh int ipv6 show route | awk '$4 == "::/0"' | del_cr)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$route" ]; then
|
if [ -z "$routes" ]; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# read -r _ _ _ _ id gateway <<<"$route"
|
while read -r route; do
|
||||||
id=$(awk '{print $5}' <<<"$route")
|
if false; then
|
||||||
gateway=$(awk '{print $6}' <<<"$route")
|
read -r _ _ _ _ id gateway <<<"$route"
|
||||||
|
else
|
||||||
|
id=$(awk '{print $5}' <<<"$route")
|
||||||
|
gateway=$(awk '{print $6}' <<<"$route")
|
||||||
|
fi
|
||||||
|
|
||||||
config=$(wmic nicconfig where "InterfaceIndex='$id'" get MACAddress,IPAddress,IPSubnet,DefaultIPGateway /format:list | del_cr)
|
config=$(wmic nicconfig where InterfaceIndex=$id get MACAddress,IPAddress,IPSubnet,DefaultIPGateway /format:list | del_cr)
|
||||||
# 排除 IP/子网/网关/MAC 为空的
|
# 排除 IP/子网/网关/MAC 为空的
|
||||||
if grep -q '=$' <<<"$config"; then
|
if grep -q '=$' <<<"$config"; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mac_addr=$(grep "MACAddress=" <<<"$config" | cut -d= -f2 | to_lower)
|
mac_addr=$(grep "MACAddress=" <<<"$config" | cut -d= -f2 | to_lower)
|
||||||
convert_net_str_to_array "$config" IPAddress ips
|
convert_net_str_to_array "$config" IPAddress ips
|
||||||
convert_net_str_to_array "$config" IPSubnet subnets
|
convert_net_str_to_array "$config" IPSubnet subnets
|
||||||
convert_net_str_to_array "$config" DefaultIPGateway gateways
|
convert_net_str_to_array "$config" DefaultIPGateway gateways
|
||||||
|
|
||||||
# IPv4
|
# IPv4
|
||||||
# shellcheck disable=SC2154
|
# shellcheck disable=SC2154
|
||||||
if [ "$v" = 4 ]; then
|
if [ "$v" = 4 ]; then
|
||||||
for ((i = 0; i < ${#ips[@]}; i++)); do
|
for ((i = 0; i < ${#ips[@]}; i++)); do
|
||||||
ip=${ips[i]}
|
ip=${ips[i]}
|
||||||
subnet=${subnets[i]}
|
subnet=${subnets[i]}
|
||||||
if [[ "$ip" = *.* ]]; then
|
if [[ "$ip" = *.* ]]; then
|
||||||
cidr=$(ipcalc -b "$ip/$subnet" | grep Netmask: | awk '{print $NF}')
|
cidr=$(ipcalc -b "$ip/$subnet" | grep Netmask: | awk '{print $NF}')
|
||||||
ipv4_addr="$ip/$cidr"
|
ipv4_addr="$ip/$cidr"
|
||||||
ipv4_gateway="$gateway"
|
ipv4_gateway="$gateway"
|
||||||
ipv4_mac="$mac_addr"
|
ipv4_mac="$mac_addr"
|
||||||
break
|
# 只取第一个 IP
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# IPv6
|
|
||||||
if [ "$v" = 6 ]; then
|
|
||||||
ipv6_type_list=$(netsh interface ipv6 show address $id normal)
|
|
||||||
for ((i = 0; i < ${#ips[@]}; i++)); do
|
|
||||||
ip=${ips[i]}
|
|
||||||
cidr=${subnets[i]}
|
|
||||||
if [[ "$ip" = *:* ]]; then
|
|
||||||
ipv6_type=$(grep "$ip" <<<"$ipv6_type_list" | awk '{print $1}')
|
|
||||||
# Public 是 slaac
|
|
||||||
# 还有类型 Temporary,不过有 Temporary 肯定还有 Public,因此不用
|
|
||||||
if [ "$ipv6_type" = Public ] ||
|
|
||||||
[ "$ipv6_type" = Dhcp ] ||
|
|
||||||
[ "$ipv6_type" = Manual ]; then
|
|
||||||
ipv6_addr="$ip/$cidr"
|
|
||||||
ipv6_gateway="$gateway"
|
|
||||||
ipv6_mac="$mac_addr"
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
fi
|
done
|
||||||
done
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
# 网关
|
# IPv6
|
||||||
# shellcheck disable=SC2154
|
if [ "$v" = 6 ]; then
|
||||||
if false; then
|
ipv6_type_list=$(netsh interface ipv6 show address $id normal)
|
||||||
for gateway in "${gateways[@]}"; do
|
for ((i = 0; i < ${#ips[@]}; i++)); do
|
||||||
if [ -n "$ipv4_addr" ] && [[ "$gateway" = *.* ]]; then
|
ip=${ips[i]}
|
||||||
ipv4_gateway="$gateway"
|
cidr=${subnets[i]}
|
||||||
elif [ -n "$ipv6_addr" ] && [[ "$gateway" = *:* ]]; then
|
if [[ "$ip" = *:* ]]; then
|
||||||
ipv6_gateway="$gateway"
|
ipv6_type=$(grep "$ip" <<<"$ipv6_type_list" | awk '{print $1}')
|
||||||
fi
|
# Public 是 slaac
|
||||||
done
|
# 还有类型 Temporary,不过有 Temporary 肯定还有 Public,因此不用
|
||||||
fi
|
if [ "$ipv6_type" = Public ] ||
|
||||||
|
[ "$ipv6_type" = Dhcp ] ||
|
||||||
|
[ "$ipv6_type" = Manual ]; then
|
||||||
|
ipv6_addr="$ip/$cidr"
|
||||||
|
ipv6_gateway="$gateway"
|
||||||
|
ipv6_mac="$mac_addr"
|
||||||
|
# 只取第一个 IP
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 网关
|
||||||
|
# shellcheck disable=SC2154
|
||||||
|
if false; then
|
||||||
|
for gateway in "${gateways[@]}"; do
|
||||||
|
if [ -n "$ipv4_addr" ] && [[ "$gateway" = *.* ]]; then
|
||||||
|
ipv4_gateway="$gateway"
|
||||||
|
elif [ -n "$ipv6_addr" ] && [[ "$gateway" = *:* ]]; then
|
||||||
|
ipv6_gateway="$gateway"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 如果通过本条 route 的网卡找到了 IP 则退出 routes 循环
|
||||||
|
if is_found_ipv${v}_netconf; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done < <(echo "$routes")
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
# linux
|
# linux
|
||||||
@ -1668,6 +1710,10 @@ collect_netconf() {
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! is_found_ipv4_netconf && ! is_found_ipv6_netconf; then
|
||||||
|
error_and_exit "Can not get IP info."
|
||||||
|
fi
|
||||||
|
|
||||||
info "Network Info"
|
info "Network Info"
|
||||||
echo "IPv4 MAC: $ipv4_mac"
|
echo "IPv4 MAC: $ipv4_mac"
|
||||||
echo "IPv4 Address: $ipv4_addr"
|
echo "IPv4 Address: $ipv4_addr"
|
||||||
@ -2384,13 +2430,13 @@ get_ip_conf_cmd() {
|
|||||||
is_in_china && is_in_china=true || is_in_china=false
|
is_in_china && is_in_china=true || is_in_china=false
|
||||||
|
|
||||||
sh=/alpine-network.sh
|
sh=/alpine-network.sh
|
||||||
if [ -n "$ipv4_mac" ] && [ -n "$ipv6_mac" ] && [ "$ipv4_mac" = "$ipv6_mac" ]; then
|
if is_found_ipv4_netconf && is_found_ipv6_netconf && [ "$ipv4_mac" = "$ipv6_mac" ]; then
|
||||||
echo "'$sh' '$ipv4_mac' '$ipv4_addr' '$ipv4_gateway' '$ipv6_addr' '$ipv6_gateway' '$is_in_china'"
|
echo "'$sh' '$ipv4_mac' '$ipv4_addr' '$ipv4_gateway' '$ipv6_addr' '$ipv6_gateway' '$is_in_china'"
|
||||||
else
|
else
|
||||||
if [ -n "$ipv4_mac" ]; then
|
if is_found_ipv4_netconf; then
|
||||||
echo "'$sh' '$ipv4_mac' '$ipv4_addr' '$ipv4_gateway' '' '' '$is_in_china'"
|
echo "'$sh' '$ipv4_mac' '$ipv4_addr' '$ipv4_gateway' '' '' '$is_in_china'"
|
||||||
fi
|
fi
|
||||||
if [ -n "$ipv6_mac" ]; then
|
if is_found_ipv6_netconf; then
|
||||||
echo "'$sh' '$ipv6_mac' '' '' '$ipv6_addr' '$ipv6_gateway' '$is_in_china'"
|
echo "'$sh' '$ipv6_mac' '' '' '$ipv6_addr' '$ipv6_gateway' '$is_in_china'"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user