开发手机群控系统(手机网络篇)
手机群控系统(补充篇)
上一周把网络问题解决了,这一周准备把自动化设置网络这一块解决掉,否则几十上百台手机的设置, 得累死
这里借助了 uiautomator2 来实现打开USB网络共享,因为后续脚本运行这一块 也是用uiautomator2
https://github.com/openatx/uiautomator2
# 第一步 先把所有手机插上Hub,Hub插上电脑
# 命令行执行
python -m uiautomator2 init
# 所有手机安装完之后,开始编写程序
# openNet.py
# 此处写法仅供参考,不同手机位置可能不一致
# 引包
import uiautomator2 as u2
import time
import sys
if __name__ == '__main__':
# 根据传过来的唯一标示符进行连接
d = u2.connect(sys.argv[1])
# 先关闭设置页面
d.app_stop('com.android.settings')
time.sleep(1)
# 打开设置页面
d.app_start('com.android.settings')
time.sleep(1)
# 点击网络
d.xpath('//*[@resource-id="android:id/list"]/android.widget.RelativeLayout[4]').click()
time.sleep(1)
# 判断是否需要打开USB网络 如果已经开启就忽略
print(d(resourceId='android:id/checkbox').info)
if not d(resourceId='android:id/checkbox').info['selected']:
time.sleep(1)
d(resourceId='android:id/checkbox').click()
自动打开USB网络这一块已经好了,接下来写自动化网卡那一块
# initAuto.sh
#!/bin/bash
# 如果看不太懂,请参考上一篇文章
iptables -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
# 这里是获取电脑上目前所有网卡列表,后续可以做排除法 找出对应每个手机网卡
netCard=`ip a |grep 'u' | grep : | awk '{print $2}' | grep : | awk -F ":" '{print $1}'`
# 获取手机列表
deviceStr=`adb devices`
# 去除顶部的 List of devices attached
str=${deviceStr/List of devices attached/}
# 因为手机数量不是很多,我电脑ip又是80网段,为了避免麻烦,让手机网段从81开始
num=81
# 循环遍历手机列表
for i in `echo "$str" | sed 's/device/\n/g'`
do {
# 打开手机USB网卡 传入 设备唯一码
python openNetwork.py $i
# 打开后停2秒 让电脑缓一下
sleep 2
# 获取目前的网卡列表
netCard2=`ip a |grep 'u' | grep : | awk '{print $2}' | grep : | awk -F ":" '{print $1}'`
# 根据最开始的网卡 筛选多出来的网卡
str=${netCard2/$netCard/}
# 重新赋值 以便下一轮使用
temp=$temp2
# 设置网卡ip
ifconfig $str 192.168.$num.1
echo $str 192.168.$num.1
iptables -t nat -A POSTROUTING -s 192.168.$num.0/24 -o enp2s0 -jMASQUERADE
# 以下操作手机
adb -s $i shell su -c 'ip addr add 192.168.'$num'.10/24 dev rndis0'
adb -s $i shell su -c 'ip addr del 192.168.42.129/24 dev rndis0'
adb -s $i shell su -c 'ip route add table local default via 192.168.'$num'.1 dev rndis0'
adb -s $i shell su -c 'ip route add table local 192.168.'$num'.0/24 dev rndis0 proto static scope link'
adb -s $i shell su -c 'setprop net.dns1 114.114.114.114'
num=$((num+=1))
}
done
代码编写部分已完成,接下来是运行
# 获取权限
su
# 执行脚本
./initAuto.sh
大功告成 ,下一篇可能会写具体的群控程序吧
总体来说,难度是有一点,不过到最后还好克服了,顺利交货~~