使用IPV6通过Wi-Fi使用ADB CONNECT连接全版本Android设备


如何使用IPV6通过Wi-Fi使用ADB CONNECT连接Android设备?

通过 IPV4 连接一起正常,使用IPV6连接提示 failed to connect to 'suroy.cn:port': Connection refused

stackoverflow找到相关问题

You will not be able to use IPV6 to connect to the adbd on the device until you upgrade it to Android 7.0
adbd in all Android versions before that use AF_INET address family. adbd in Android 7.0 uses AF_INET6

简单说:官方限制 Android 7.0 以下无法实现,需要修改内核方可。


显然,曲线救国更加现实,采用端口转发技术将IPV6端口转发到IPV4。
采用 socat 进行端口转发

# 将ipv6 6666端口转发到ipv4 8888端口
socat -d -d TCP6-LISTEN:5556,reuseaddr,fork tcp4:127.0.0.1:5555

若使用termux作为终端工具需要先行安装socat pkg install socat -y

为了方便,花了点时间写了个 shell 脚本:
Github: sushell-adbon

启动: ./adbon start 5555 listen root
启动端口号为5555的 WIFI ADB 服务,同时监听ipv6端口转发
关闭: ./addon stop 5555 0 root

附:常用的端口转发工具见下表

工具名称主要用途平台备注
lcx端口映射Windows只支持tcp协议的端口转发,非系统内置。linux下叫做可以实现端口转发和端口映射
netsh端口映射Windows只支持tcp协议的端口转发,需要安装ipv6
rinetd反向代理Linux非内置,需要自行安装
Earthworm端口映射、Socks5代理Linux、Windows、MacOS、Arm-Linux非系统内置,可以十分方便的支持多级转发
frp高性能的反向代理应用go基于反向代理,可以十分灵活的进行内网穿透,绕过防火墙
reGeorgSocks5 代理常见脚本语言reGeorg利用webshell建立一个socks代理进行内网穿透,服务器必须支持aspx、php、jsp、js等web语言
Metasploit portfwd端口映射MSF -> Metpreter会话需要网络状况较好
socat端口映射Linux可能需要安装
Metasploit->socks4a反向代理MSF -> Metpreter会话需要会话主机有外网代理IP
tunnaHTTP隧道常见脚本语言需脚本环境执行,并且不太稳定
localtuuel内网公网映射nodojs和ngork一样可以实现内网到公网端口的映射
ngork内网公网映射go可以选择自建服务器或则和使用工具自带的服务器
dns2tcpDNS隧道kaii内置防火墙过滤内部tcp出站策略的情况下,走DNS隧道,,通过DNS流量中继TCP连接
IodineDNS隧道linux原理上和dns2tcp类似
icmpshICMP隧道需要root权限需要禁止系统对icmp的相应,用工具来处理收发icmp包

参考文献:内网渗透中的端口转发

常用ADB命令

启动 adb 服务,一般会自动启动
adb start-server

杀死 adb 服务
adb kill-server

重新安装现有应用,保留其数据:
adb install -r demo.apk

卸载应用(重要的系统组件切忌卸载)
需要指定包名
adb uninstall cn.com.test.mobile

卸载 app 但保留数据和缓存文件
adb uninstall -k cn.com.test.mobile

列出手机装的所有 app 的包名
adb shell pm list packages

列出除了系统应用的第三方应用包名
adb shell pm list packages -3

清除应用数据与缓存
adb shell pm clear cn.com.test.mobile

启动应用
指定启动的 Activity
adb shell am start -ncn.com.test.mobile/.ui.SplashActivity

启动 Service
需要先指定包名,然后指定服务的位置、名称
adb shell am startservice -n com.tencent.mm/.service.AccountAuthenticatorService

……

华为手机慎用 stop adbd 和 start adbd ,可能无限卡 recovery(未亲测)

一段时间后提示 device unauthorized

您必须接受主机的 RSA 密钥,才能显式授予 adb 对设备的访问权限。默认情况下,ADB 服务器生成的密钥对以 adbkey(私钥)和 adbkey.pub(公钥)的形式存储在以下密钥存储库目录中:
MacOS 上,文件位置可能为:$HOME/.android。
WindowsLinux 上,文件位置为:%USERPOFILE%.android。
在 Windows 上,RSA 身份验证密钥在某些情况下也可能存储在 C:/Windows/System32/config/systemprofile/.android 中。当 ADB 服务器需要密钥时,它会先搜索 ADB 服务器密钥存储库目录。如果找不到任何密钥,它会接着检查 ANDROID_VENDOR_KEYS 环境变量。如果还是找不到任何密钥,本地 ADB 服务器会生成一个新密钥对,并将其保存在 ADB 服务器密钥存储库目录中。
以上引用自官方文档

由图上及报错信息可知由于授权问题导致无法正常连接,故我们需要重新授权,至于出现该问题原因未知

从官方文档获知,在我们同意 ADB 调试授权后会在安卓设备上 /data/misc/adb/adb_keys 该文件存放电脑端生成的公钥内容 adbkey.pub 中的内容,于是我们可以直接将其内容复制到安卓设备上即可,之后杀死电脑端ADB服务,重新连接正常。
(经过测试发现复制公钥到安卓之后可以不用更改权限也可以直接使用)
附:adb_keys 文件权限 rw-rw

参考文档:https://source.android.google.cn/source/add-device?hl=zh-cn

声明:Grows towards sunlight |版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 使用IPV6通过Wi-Fi使用ADB CONNECT连接全版本Android设备


Grows towards sunlight and Carpe Diem