设置环境变量
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套接字的连接相关推荐

  1. 用phpcms切换中英文网页的方法(不用解析二级域名)、phpcms完成pc和手机端切换(同一域名)...

    AA.phpcms进行双语切换方法(不用解析二级域名) phpcms进行两种语言的切换,有一把部分的人都是进行的二级域名的解析,这样的话可能会有一部分的麻烦,我这里有一种方法可以不用解析二级域名就可以 ...

  2. 微信自定义分享在pc正常手机端不正常问题

    微信自定义分享在pc正常手机端不正常,使用debug得到的结果都是ok,没问题.但是手机微信就是不行.经过排查后发现,分享的链接不能够直接使用授权链接.因此,为了获取用户信息,我的解决办法是新建一个新 ...

  3. PC端手机端百度查排名工具(SEO工具)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaeX0TZN-1637306311903)(http://cdn.h3blog.com/20211119142524. ...

  4. window.open 兼容 PC 和手机端

    window.open 由于浏览器安全策略的原因,在 PC 和手机端的表现可能会出现不同 更多精彩 更多技术博客,请移步 asing1elife's blog 导致不同的根本原因 由于 window. ...

  5. daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序.doc...

    用Socket套接字实现DAYTIME协议的服务器和客户端程序.doc 一. 设计目的 为了提高同学的自主动手能力,把理论知识运用于实践中,从实践中更好的领悟所学的知识 . 二. 题目要求及需求分析 ...

  6. TCP/IP协议概念通俗讲解, 端口号与套接字的区别

    网上对TCPIP协议.以及端口号.套接字以及绑定的概念已经写的很多了.但不是所有的都适合新手,最近下进行FreeRTOS+TCP开发时,发现官方的解释特别通俗易懂,因此对我对简介部分进行了翻译,方便懒 ...

  7. daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210414073352.docx-原创力文档...

    用Socket套接字实现 DAY TIME 协议的服务器和客户端程序 一.设计目的 为了提高同学的自主动手能力,把理论知识运用于实 践中,从实践中更好的领悟所学的知识. 二.题目要求及需求分析 网络I ...

  8. daytime协议的服务器和客户端程序,用socket套接字实现daytime协议的服务器和客户端程序精编版.doc...

    用socket套接字实现daytime协议的服务器和客户端程序精编版.doc 还剩 11页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: ------- ...

  9. pc变手机端html,让移动端的事件变为PC端的事件

    最近看到了一个手机端的小程序,可是在电脑端无法使用,原因是其中一个js是手机端js,怎么将这个js专为PC端可以使用的js function tabLoad(obj,oJson){ var This= ...

最新文章

  1. 为什么二级菜单会被挡住_二级建造师为什么这么难考?2021年二建考试也会很难吗?...
  2. 如何在vim保存时获得sudo权限
  3. AttributeError: module ‘cv2‘ has no attribute ‘SIFT‘
  4. 少儿编程python课程-选好课程很重要,极客晨星让孩子喜欢上少儿编程
  5. JavaEE 要懂的小事:二、图解 Cookie(小甜饼)
  6. Activiti源码 之工厂模式
  7. html5新变化,HTML5的新变化,分享
  8. 宝塔定时任务执行php源码任务_Linux at命令详解:定时执行任务
  9. Simple2D-24 Sprite 渲染树
  10. nginx 失败问题集合
  11. Oracle新建用户及权限
  12. 【Xposed】框架安装full.xml.gz下载失败解决方法总结
  13. pug 编译html,pug之HTML模板引擎安装编译教程
  14. 交换机之三层交换原理
  15. 微信html5电子相册,如何快速制作微信H5电子相册?
  16. linux编译.o文件,使用-O0编译Linux内核
  17. IOS 发布被拒 PLA 1.2问题 整个过程介绍 02 个人账户升级公司账户
  18. html鼠标背景特效,6种鼠标滑过按钮背景动画特效
  19. [日语二级词汇]动词(3)
  20. nest.js实战之Filter异常处理

热门文章

  1. php 支付宝手机端_【php源码】支付宝手机支付接口,有回调可接入自己网站
  2. 卸载AVG-antivirus
  3. docker镜像格式
  4. C# Media播放器
  5. 全屋三维交互漫游——three.js实现
  6. 步进电机正反转实验_三相电机正反转自锁互锁弄清楚,就能轻松接线电工技术知识学习干货分享...
  7. Android studio校园通 社区活动 新闻 组织结构 日历
  8. 【转】Pandas 基础练习(二) —— 数据条件选择与排序!
  9. 现代项目管理学习心得
  10. 软件测试工程师必知试题 | 根基