Skip to content

Instantly share code, notes, and snippets.

@Ran-Xing
Last active January 25, 2025 13:31
Show Gist options
  • Save Ran-Xing/8b7c187d47a547749ab0b0270aae5670 to your computer and use it in GitHub Desktop.
Save Ran-Xing/8b7c187d47a547749ab0b0270aae5670 to your computer and use it in GitHub Desktop.
openwrt、usb network、gateway update、custom domain host、wifi adb、wifi ap

Do it:

usb in:

  1. Check PCI Status
  2. Start ADB Service(-a)
  3. Check ADB Auth
  4. Start WiFi-ADB
  5. ADB Forward TO OpenWrt
  6. Update Custom doamin
  7. down ap wifi interface

usb out

  1. check usb status
  2. start ap wifi network
  3. update gateway
2024-12-02 18:28:45 Skip unbind. Exiting...
2024-12-02 18:28:45 Skip unbind. Exiting...
2024-12-02 18:28:45 Binding device...
2024-12-02 18:28:45 Device already bound, skipping...
2024-12-02 18:28:45 Device already bound, skipping...
2024-12-02 18:28:45 Device already bound, skipping...
2024-12-02 18:28:48 Lock File /tmp/99-usb-monitor.flag deleted.
2024-12-02 18:28:48 Binding device...
2024-12-02 18:28:48 Device already bound, skipping...
2024-12-02 18:28:48 Device already bound, skipping...
2024-12-02 18:28:48 Device already bound, skipping...
2024-12-02 18:28:48 Device already bound, skipping...
2024-12-02 18:29:08 values i:ZFlip4 GW_IP:192.168.250.246 found.
2024-12-02 18:29:08 Route not change...
2024-12-02 18:29:18 domain update 192.168.250.246...
#!/bin/sh
# USB设备插入监控脚本
# 定义设备标志文件路径
DEVICE_FLAG="/tmp/99-usb-monitor.flag"
DEVICE_LOG="/tmp/99-usb-monitor.log"
WIFI_Interface_Name=wwan # 无线AP网卡的名字,不填写则默认 wwan
USB_Interface_Name=ZFlip4 # USB网卡的名字,不填写则默认 ZFlip4
USB_PCI_Name="SAMSUNG SAMSUNG_Android" # lsusb 命令找到 Android 品牌信息,不填写则开启无线调试
USB_ADB_Port="59486" # 无线调试端口号,不填写则默认5555,USB_PCI_Name 为空则不开启无线调试
CustomHost=zflip4.lan # 自定义hosts 网络 -> DHCP/DNS -> 自定义劫持域名
# echo "$(date '+%Y-%m-%d %H:%M:%S') ACTION:$ACTION DEVTYPE:$DEVTYPE..." >>"${DEVICE_LOG}"
getGateway() {
interface="${1}"
GW_IP="$(ifstatus ${interface} | grep 'nexthop' | sed 's/.*"nexthop": "\([^"]*\)".*/\1/')"
# 如果GW_IP为空,则退出脚本
if [ -z "$GW_IP" ] || [ -z "$interface" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') restart i:${interface} ..." >>"${DEVICE_LOG}"
ifup "${interface}"
exit 0
fi
echo "$(date '+%Y-%m-%d %H:%M:%S') values i:${interface} GW_IP:${GW_IP} found." >>"${DEVICE_LOG}"
}
updateGateway() {
if ip route show default | grep -q "${GW_IP}"; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Route not change..." >>"${DEVICE_LOG}"
return
fi
if ip route show default; then
ip route replace default via "${GW_IP}"
else
ip route add default via "${GW_IP}"
fi
}
if [ "${DEVTYPE}" == "usb_device" ] && [ "${ACTION}" == "add" ] && [ -f "${DEVICE_FLAG}" ]; then
# 如果文件存在,表示是历史残留,删除
if ! ps | grep -eq "$(cat ${DEVICE_FLAG})"; then
rm -f "${DEVICE_FLAG}"
echo "$(date '+%Y-%m-%d %H:%M:%S') Lock File ${DEVICE_FLAG} deleted." >>"${DEVICE_LOG}"
fi
exit 0
fi
if [ "${DEVTYPE}" == "usb_interface" ]; then
# 判断是否已经处理过该事件
if [ -f "${DEVICE_FLAG}" ]; then
# 如果文件存在,表示已经执行过,不再执行
echo "$(date '+%Y-%m-%d %H:%M:%S') Device already bound, skipping..." >>"${DEVICE_LOG}"
exit 0
fi
case "$ACTION" in
"add")
(
# 延迟等待 (例如 20 秒)
echo $$ >"${DEVICE_FLAG}"
sleep 5
# 在延迟后执行的操作,例检查是否加载好设备
if [ -n "${USB_PCI_Name}" ] && ! lsusb | grep -q "${USB_PCI_Name}"; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Device ${USB_PCI_Name} not found, skipping..." >>"${DEVICE_LOG}"
exit 0
fi
# 检测adb是否已启动
if [ -n "${USB_PCI_Name}" ] && ! ps | grep "adb -a" | grep -qv grep; then
export ADB_VENDOR_KEYS=/root/.android/adbkey
adb kill-server
adb -a -P 5037 fork-server server
echo "$(date '+%Y-%m-%d %H:%M:%S') Start adb server..." >>"${DEVICE_LOG}"
sleep 3
fi
# 检测设备是否已授权
if [ -n "${USB_ADB_Name}" ] && ! adb devices | grep -qE "${USB_ADB_Name}\s+device"; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Devices ${USB_ADB_Name} not good..." >>"${DEVICE_LOG}"
exit 0
fi
# 检测设备是否已开启 无线调试
if [ -n "${USB_ADB_Name}" ] && ! adb shell "netstat -tuln | grep -q ${USB_ADB_Port:-5555}"; then
adb tcpip "${USB_ADB_Port:-5555}" || (
sleep 3
adb tcpip "${USB_ADB_Port:-5555}"
) || (
echo "$(date '+%Y-%m-%d %H:%M:%S') adb tcpip ${USB_ADB_Port:-5555} error..." >>"${DEVICE_LOG}"
exit
)
fi
# 检测设备是否已开启端口转发
# if ! adb forward --list | grep -q 59486; then
# adb forward tcp:59486 tcp:59486 || (
# sleep 3
# adb forward tcp:59486 tcp:59486
# ) || (
# echo "$(date '+%Y-%m-%d %H:%M:%S') adb forward error..." >>"${DEVICE_LOG}"
# exit 0
# )
# fi
# echo "$(date '+%Y-%m-%d %H:%M:%S') adb forward done..." >>"${DEVICE_LOG}"
# 更新路由
sleep 15
# 检测无线AP网卡状态,运行中则停止
if ifstatus "${WIFI_Interface_Name:-wwan}" | grep -q '"up": true'; then
ifdown "${WIFI_Interface_Name:-wwan}"
echo "$(date '+%Y-%m-%d %H:%M:%S') ${WIFI_Interface_Name:-wwan} down..." >>"${DEVICE_LOG}"
fi
# 获取USB网卡网关地址
getGateway "${USB_Interface_Name:-ZFlip4}"
# 检测默认网关是否是USB网卡
if ip route show default | grep -q "${GW_IP}"; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Route not change..." >>"${DEVICE_LOG}"
else
updateGateway "${USB_Interface_Name:-ZFlip4}" # 更新默认网关为USB网关
fi
# 自定义挟持域名
if [ -n "${CustomHost}" ]; then
uci set dhcp.CustomHost='domain'
uci set dhcp.CustomHost.name="${CustomHost}"
uci set dhcp.CustomHost.ip="$GW_IP"
uci set dhcp.CustomHost.comments='CustomHost'
uci commit dhcp
/etc/init.d/dnsmasq reload
/etc/init.d/frpc reload
fi
# 等待10秒,避免重复执行
sleep 10
echo "$(date '+%Y-%m-%d %H:%M:%S') domain update ${GW_IP}..." >>"${DEVICE_LOG}"
rm -f "${DEVICE_FLAG}"
) &
;;
"remove")
(
sleep 5 # 经过测试,重启基本秒检测到
if ifstatus "${USB_Interface_Name:-ZFlip4}" | grep -q '"up": false'; then
# 启动无线网卡
ifup "${WIFI_Interface_Name:-wwan}"
sleep 5 # 等待无线AP连接网络
getGateway "${WIFI_Interface_Name:-wwan}"
updateGateway
echo "$(date '+%Y-%m-%d %H:%M:%S') update route to ${WIFI_Interface_Name:-wwan}..." >>"${DEVICE_LOG}"
fi
rm -f "${DEVICE_FLAG}"
) &
;;
*)
# ACTION 不合法,退出脚本
echo "$(date '+%Y-%m-%d %H:%M:%S') Skip $ACTION. Exiting..." >>"${DEVICE_LOG}"
exit 0
;;
esac
# 如果文件不存在,执行绑定操作
touch "${DEVICE_FLAG}"
echo "$(date '+%Y-%m-%d %H:%M:%S') Binding device..." >>"${DEVICE_LOG}"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment