将远程端口通过adb转发到本地机器

41

这是关于在安卓设备上使用adb的查询。

是否有方法将远程端口(即安卓设备/模拟器上的端口)转发到连接设备的本地机器上?

$ adb forward tcp:port1 tcp:port2 # 将机器上的本地端口port1转发到设备上的端口port2。

谢谢!


我现在也处于类似的情况,但我想我会选择另一种方法:将应用程序绑定到127.0.0.1:12345并隧道连接到该端口。你为什么那么在意谁发起连接呢?一旦建立了TCP连接,双方都可以进行通信/监听。 - Benjamin Podszun
2个回答

33

最近谷歌更新了ADB服务,并添加了reverse命令,该命令应该能够完成工作。

reverse文档中可以得到以下信息:

这实现了adb reverse功能,即能够从设备向主机反向连接套接字。其中一种转发命令是:<forward-command>,如下所述:

  1. list-forward
  2. forward:<local>;<remote>
  3. forward:norebind:<local>;<remote>
  4. killforward-all
  5. killforward:<local>

请注意,在这种情况下,<local>对应于设备上的套接字,<remote>对应于主机上的套接字。

reverse:list-forward的输出与host:list-forward相同,除了<serial>将只是host


这个答案已经过时且失效了,但是该功能仍然存在并且可以使用。正确的命令结构是adb reverse tcp:8888 tcp:9999有关详细信息,请参见 adb --help - Jessie Koffi

1
你真的需要转发端口吗?还是你只是想找到一种方法,让在 Android shell 上运行的程序能够使用套接字与主机进行通信?我成功地通过将我的消息发送到“10.0.2.2”上感兴趣的端口来实现后者,这是主机的环回适配器。请参阅文档here编辑
这是更新的link

25
如何使用设备而非模拟器来完成这项任务? - Johnny
11
在真实设备上,你需要使用adb反向代理。例如,如果你在主机上有一个监听8080端口的服务器,并且想要将设备上的端口8000反向转发到它,那么你可以使用adb reverse tcp:8000 tcp:8080 - sacha
1
@sacha 我找不到任何关于adb reverse命令的文档。它真的存在吗?需要哪个版本的SDK? - akuz
根据 https://android.googlesource.com/platform/system/core/+/252586941934d23073a8d167ec240b221062505f,adb reverse 已于2014年5月加入到安卓代码中。 - sacha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接