如何使用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 | 基于反向代理,可以十分灵活的进行内网穿透,绕过防火墙 |
reGeorg | Socks5 代理 | 常见脚本语言 | reGeorg利用webshell建立一个socks代理进行内网穿透,服务器必须支持aspx、php、jsp、js等web语言 |
Metasploit portfwd | 端口映射 | MSF -> Metpreter会话 | 需要网络状况较好 |
socat | 端口映射 | Linux | 可能需要安装 |
Metasploit->socks4a | 反向代理 | MSF -> Metpreter会话 | 需要会话主机有外网代理IP |
tunna | HTTP隧道 | 常见脚本语言 | 需脚本环境执行,并且不太稳定 |
localtuuel | 内网公网映射 | nodojs | 和ngork一样可以实现内网到公网端口的映射 |
ngork | 内网公网映射 | go | 可以选择自建服务器或则和使用工具自带的服务器 |
dns2tcp | DNS隧道 | kaii内置 | 防火墙过滤内部tcp出站策略的情况下,走DNS隧道,,通过DNS流量中继TCP连接 |
Iodine | DNS隧道 | linux | 原理上和dns2tcp类似 |
icmpsh | ICMP隧道 | 需要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
启动应用
指定启动的 Activityadb 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。
在 Windows 和 Linux 上,文件位置为:%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
S
请问这个ipv6转发v4脚本是在Android手机执行吗 未知 | · | 322 ms
Suroy
@S : 是的,需要安卓,尽量使用root权限执行 未知 | · | 324 ms
S
@S : 2024/06/21 20:43:58 socat[48269] N listening on LEN=28 AF=30 [0000:0000:0000:0000:0000:0000:0000:0000]:5556但是远程依旧连不上 未知 | · | 327 ms
Suroy
@S : 你应该需要检查一下是否有公网的IPV6存在,一些路由器会自动开启防火墙,还有一些路由器的IPV4和IPV6的防火墙说是开的 未知 | · | 329 ms