相关文章推荐
温暖的可乐  ·  python - 防止 pandas ...·  2 年前    · 

本系列文章从 adb forward tcp:11111 tcp:22222 说起,介绍adb forward的一些细节,包括adb forward的相关代码,adb forward在drozer上的使用,以及如何利用adb forward开发一个PC端和手机端通信的工具。

本文是本系列文章中的第一篇,介绍adb forward的大致原理,目的是看完这篇之后可以对adb forward有个清晰的理解。

顾名思义 ,adb forward的功能是建立一个转发, adb forward tcp:11111 tcp:22222 的意思是,将PC端的11111端口收到的数据,转发给到手机中22222端口。但是光执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是:

  • (a)在手机端,建立一个端口为22222的server,并打开server到监听状态。
  • (b)在PC端,建立一个socket client端,连接到端口为11111的server上。

这两个步骤有先后顺序,步骤(a)要先执行。
adb forward tcp:11111 tcp:22222 可以在步骤(a)之前执行。

★ adb forward 的一些基本操作

配好adb的环境,连上手机,执行 adb forward tcp:11111 tcp:22222 ,如果执行成功的话,没有任何输出,如下:

$ adb forward tcp:11111 tcp:22222

此时,通过运行adb forward --list查看刚才的执行结果。

$ adb forward --list
4391b53a tcp:11111 tcp:22222

adb forward 命令的一些帮助信息,可以直接执行adb看到。

★ PC端,端口为11111的server

执行adb forward tcp:11111 tcp:22222之后,通过netstat -a 可以看到下面的信息:

  TCP    127.0.0.1:11111        LAPTOP-B0112F9S:0      LISTENING

在PC端,adb forward创建了一个监听本机11111端口的server。通过adb 转发的数据,需要先发到11111端口(在本例中如此)。这个11111端口是约定好的,你也可以改成其他端口。

PC端的应用通过socket连接到11111端口,以准备发送数据。但是连接到11111端口之前,还需要在手机端启动端口为22222的server。

★ 手机端,端口为22222的server

在PC端的应用开始连接之前,手机端要启动端口为22222的server(socket server)。

手机中adb的daemon进程将连接到22222端口,这样PC端应用就可以连接PC端的11111端口了,连接上之后就可以从PC端的应用发送数据给手机端的应用,手机端的应用也可以发送数据给PC端的应用。

画一个示意图,可以更清楚的说明。

  • PC端的应用与手机端应用通信建立的过程:
    (1)执行adb forward tcp:11111 tcp:22222
    (2)启动手机端应用,建立端口为22222的server,并处于监听状态(LISTENING)
    (3)启动PC端应用,连接端口为11111的server(adb创建的)
    之后,就可以传输数据了。

  • PC端的应用与手机端应用之间传输数据的过程:
    (1)PC端应用将数据发送给端口为11111的server(adb创建的)
    (2)adb将数据转发给手机端adbd进程(通过USB传输)
    (3)adbd进程将数据发送给端口为22222的server(手机端应用创建的)
    传递是双向的,第(1)和第(3)步是通过socket实现的,所以通过socket的读和写就完成了PC端应用和手机端应用的数据传递。

https://developer.android.com/studio/command-line/adb.html

同系列文章:
adb forward的细节(4):使用adb forward打造一个PC端与手机端交互的工具

<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-7b4cdcb592.css" rel="stylesheet"> </article> 本系列文章从adb forward tcp:11111 tcp:22222说起,介绍adb forward的一些细节,包括adb forward的相关代码,adb forward在drozer上的使用,以及如何利用adb forward开发一个PC端和手机端通信的工具。本文是本系列文章中的第一篇,介绍adb forward的大致原理,目的是看完这篇之后可以对adb forward有个清晰的理解。... The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse. Please ensure that adb is correctly located at 'D:\Program Files\Android\android-sdk\platform-tools\adb.exe' and can be executed. 使用 adb forward 打造一个通过USB连接建立的PC端与手机端交互的工具,类似于银行里的服务评价器,由PC端发出指令,在手机端(或终端)接收指令并显示页面。 1、 adb forward 原理概述 adb forward 的功能是建立一个转发 如:adb forward tcp:8000 tcp:9000 的意思是,将PC端的 8000 端口收到的数据,转发给手机中的 9000 ... 在PC端,adb forward创建了一个监听本机8888端口的server。通过adb 转发的数据,需要先发到8888端口,8888端口是约定好的,你也可以改成其他端口。netstat -a |findstr 8888 查看8888端口的状态 adb forw... adb forward --list //查看所有从电脑端到手机端的端口映射 相当于电脑上访问指定端口,就会从手机上访问指定端口。如上所示,将电脑的8080端口映射到手机的8000端口,在电脑上访问8080端口,就会转发到手机上的8000端口。 将手机上的端口映射到电脑的端口 adb reverse tcp:8080 tcp:8000 adb reverse --list //查看所有从手机端到电脑端的端口映射
xgm@sw-server:~/qrd/ics/qjb$ git diff system/core/adb/ diff --git a/system/core/adb/adb.c b/system/core/adb/adb.c index d697b8a..ce1b3a5 100644 --- a/system/core/adb/adb.c +++ b/system/core/adb/ad
adb forward tcp:6100 tcp:7100 // PC上所有6100端口通信数据将被重定向到手机端7100端口server上 adb forward tcp:6100 local:logd // PC上所有6100端口通信数据将被重定向到手机端UNIX类型socket上 通过adb forward我们可以接收手机端server[或者unix域socket]
在使用 `adb forward` 命令时,如果出现了端口丢包的情况,可以尝试以下几种解决方法: 1. 检查网络环境:丢包可能是因为网络环境不稳定所致,可以尝试使用其他网络环境进行测试,比如更换网络连接方式,或者尝试连接到不同的 Wi-Fi 网络。 2. 增加缓冲区大小:可以尝试增加缓冲区的大小,来减少丢包的可能性。可以通过 `adb forward` 命令的 `-t` 选项设置 TCP 缓冲区大小,例如:`adb forward tcp:8080 tcp:8080 -t 16384`。 3. 降低传输速度:如果缓冲区大小的设置并没有解决问题,可以尝试降低传输速度来减少丢包。可以通过 `-r` 选项降低数据传输速度,例如:`adb forward tcp:8080 tcp:8080 -r 1024`。 4. 使用其他端口:如果上述方法仍无法解决问题,可以尝试使用其他端口,或者将本地端口和设备端口进行互换。例如,将 `adb forward tcp:8080 tcp:8080` 修改为 `adb forward tcp:8080 tcp:8081`。 5. 升级 ADB 版本:如果以上方法仍然无法解决问题,可以尝试升级 ADB 版本,或者尝试使用其他的 ADB 工具进行连接。
weixin_39724712: 公钥登陆的过程有问题。应该是客户端生成RSA公钥和私钥,客户端将自己的公钥发送给服务器,客户端发起连接,服务器生成一串随机数,然后用客户端的公钥进行加密,密文发给客户端,客户端用自己的私钥进行解密,得到随机字串,然后再用MD5对随机串生成摘要发回给服务器,服务器同样用MD5对自己的随机串生成摘要,比较两个摘要,相同的话,认证就完成了。 一般所说的私钥加密是用来进行数字签名的,公钥解密是对签名进行验证用的。 客户端请求连接服务器时候,安全确认都还没有建立呢,怎么可能就发一个随机字符串过去呢? SSH known_hosts / authorized_keys 的解释 赛博朋克2021: 请问在远程服务器上怎么查看finger print进行确认呢 GPIO输入输出 qq_39171284: 老哥,最后那两个例子能不能写清楚点,看不出来是输入还是输出 ssl客户端与服务端通信的demo lililirururu: 程序在arm架构无法运行,大佬 ssl客户端与服务端通信的demo lililirururu: 大佬,客户端ssl_connect报错,是什么问题?