利用ADB 协议建立PC与手机端本地unix套接字的连接
设置环境变量
export ADB_TRACE=adb
可以取的值包括 all, adb, sockets, packets, rwx, usb, sync, sysdeps, transport, jdwp, services, auth, fdevent, shell
取多个值用空格分割
但是adb 内部限制了输出的字数,导致最重要的writex输出(即最总发送给adb server的数据)长度只有16字节。为此,必须修改代码:
system/core/adb_utils.cpp文件,找到
std::string dump_hex(const void* data, size_t byte_count) {
- byte_count = std::min(byte_count, size_t(16));
+ //byte_count = std::min(byte_count, size_t(16));
重新编译adb
make adb
adb发送的协议是 4字节16进制数+命令。
比如 adb devices
发送的命令就是 000chost:devices
返回: ‘OKAY0010d9dbe061\tdevice\n’
adb shell 命令:
需要先发送: 0012host:transport-any
收到 ‘OKAY’
继续发送’0029shell:ls\ncat /proc/net/unix’
收到 ‘OKAYacct init.miui.post_boot.sh oem \nbin init.miui.rc persist \nbt_firmware init.miui8.rc proc \nbugreports init.msm.usb.configfs.rc property_contexts \ncache init.offline.log.rc res \ncharger init.qcom.class_core.sh root \nconfig init.qcom.early_boot.sh sbin \ncust init.qcom.factory.rc sdcard …’
可以看到,shell: 后跟命令,而且可以用’\n’发送多个命令。返回值是OKAY后加结果。
在实际中,adb shell ls 这样的命令,会发送”shell,v2,TERM=xterm:ls” 这样的字符串,这样返回值中就会带有xterm的很多标志字符串。
如果你只是取数据的话,用”shell:< command >”的方法是最简单的。
adb forward tcp:7843 localabstract:unix_name
将手机上的一个unix套接字foward到端口7843上。
发送 ‘host:forward:tcp:7843;localabstract:unix_name’
将得到 OKAY
随后,你就可以访问localhost:7843了。
localabstract是用在抽象套接字上的,在手机上,用adb shell cat /proc/net/unix 凡是名字前面有’@’的都是抽象套接字
抽象套接字不需要创建一个文件节点,所以免去了linux权限。创建抽象套接字,只需要在套接字名字的第一个字符指定为 ‘\0’即可。
如何在不指定本地端口号的情况下,直接连接远程的unix socket呢?
这个方法是和shell的方法类似,
需要先发送: 0012host:transport-any
收到 ‘OKAY’
继续发送’003blocalabstract:…..’
收到’OKAY’后, 不要关闭socket,继续发送消息即可
用python实现的模拟发送
import socket
import timeunix_name='you_name'def query(s, msgs):for msg in msgs:pro_msg = "%04x%s"%(len(msg),msg)print("send:",pro_msg)s.send(pro_msg)time.sleep(0.2)reply = s.recv(1024*1024)print('recv:', reply)def adb_query(*msgs):s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);s.connect((socket.gethostbyname('localhost'), 5037))query(s, msgs)s.close()def forward(unixname, func):s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);s.connect((socket.gethostbyname('localhost'), 5037))msg = "localabstract:%s" % unixnamequery(s,('host:transport-any', msg))func(s)s.close()def http_request(s):s.send('GET / HTTP/1.1\r\n\r\n')res = s.recv(1024)print(res)adb_query('host:devices')adb_query('host:transport-any', 'shell:ls\ncat /proc/net/unix')forward(unix_name, http_request)
利用ADB 协议建立PC与手机端本地unix套接字的连接相关推荐
- 用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)...
AA.phpcms进行双语切换方法(不用解析二级域名) phpcms进行两种语言的切换,有一把部分的人都是进行的二级域名的解析,这样的话可能会有一部分的麻烦,我这里有一种方法可以不用解析二级域名就可以 ...
- 微信自定义分享在pc正常手机端不正常问题
微信自定义分享在pc正常手机端不正常,使用debug得到的结果都是ok,没问题.但是手机微信就是不行.经过排查后发现,分享的链接不能够直接使用授权链接.因此,为了获取用户信息,我的解决办法是新建一个新 ...
- PC端手机端百度查排名工具(SEO工具)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaeX0TZN-1637306311903)(http://cdn.h3blog.com/20211119142524. ...
- window.open 兼容 PC 和手机端
window.open 由于浏览器安全策略的原因,在 PC 和手机端的表现可能会出现不同 更多精彩 更多技术博客,请移步 asing1elife's blog 导致不同的根本原因 由于 window. ...
- daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序.doc...
用Socket套接字实现DAYTIME协议的服务器和客户端程序.doc 一. 设计目的 为了提高同学的自主动手能力,把理论知识运用于实践中,从实践中更好的领悟所学的知识 . 二. 题目要求及需求分析 ...
- TCP/IP协议概念通俗讲解, 端口号与套接字的区别
网上对TCPIP协议.以及端口号.套接字以及绑定的概念已经写的很多了.但不是所有的都适合新手,最近下进行FreeRTOS+TCP开发时,发现官方的解释特别通俗易懂,因此对我对简介部分进行了翻译,方便懒 ...
- daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210414073352.docx-原创力文档...
用Socket套接字实现 DAY TIME 协议的服务器和客户端程序 一.设计目的 为了提高同学的自主动手能力,把理论知识运用于实 践中,从实践中更好的领悟所学的知识. 二.题目要求及需求分析 网络I ...
- daytime协议的服务器和客户端程序,用socket套接字实现daytime协议的服务器和客户端程序精编版.doc...
用socket套接字实现daytime协议的服务器和客户端程序精编版.doc 还剩 11页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: ------- ...
- pc变手机端html,让移动端的事件变为PC端的事件
最近看到了一个手机端的小程序,可是在电脑端无法使用,原因是其中一个js是手机端js,怎么将这个js专为PC端可以使用的js function tabLoad(obj,oJson){ var This= ...
最新文章
- 为什么二级菜单会被挡住_二级建造师为什么这么难考?2021年二建考试也会很难吗?...
- 如何在vim保存时获得sudo权限
- AttributeError: module ‘cv2‘ has no attribute ‘SIFT‘
- 少儿编程python课程-选好课程很重要,极客晨星让孩子喜欢上少儿编程
- JavaEE 要懂的小事:二、图解 Cookie(小甜饼)
- Activiti源码 之工厂模式
- html5新变化,HTML5的新变化,分享
- 宝塔定时任务执行php源码任务_Linux at命令详解:定时执行任务
- Simple2D-24 Sprite 渲染树
- nginx 失败问题集合
- Oracle新建用户及权限
- 【Xposed】框架安装full.xml.gz下载失败解决方法总结
- pug 编译html,pug之HTML模板引擎安装编译教程
- 交换机之三层交换原理
- 微信html5电子相册,如何快速制作微信H5电子相册?
- linux编译.o文件,使用-O0编译Linux内核
- IOS 发布被拒 PLA 1.2问题 整个过程介绍 02 个人账户升级公司账户
- html鼠标背景特效,6种鼠标滑过按钮背景动画特效
- [日语二级词汇]动词(3)
- nest.js实战之Filter异常处理
热门文章
- php 支付宝手机端_【php源码】支付宝手机支付接口,有回调可接入自己网站
- 卸载AVG-antivirus
- docker镜像格式
- C# Media播放器
- 全屋三维交互漫游——three.js实现
- 步进电机正反转实验_三相电机正反转自锁互锁弄清楚,就能轻松接线电工技术知识学习干货分享...
- Android studio校园通 社区活动 新闻 组织结构 日历
- 【转】Pandas 基础练习(二) —— 数据条件选择与排序!
- 现代项目管理学习心得
- 软件测试工程师必知试题 | 根基