【问题标题】:Android emulator access redir port from other hostAndroid模拟器从其他主机访问redir端口
【发布时间】:2010-10-27 12:17:54
【问题描述】:

在我使用模拟器调试的 android 应用程序中运行服务器套接字。使用模拟器控制台和“redir add tcp:8888:8888”,我可以使该服务可用于在我的开发机器上运行的程序(作为 localhost:8888)。

但是,redir 端口在任何其他网络接口上都不可用,这意味着我无法通过本地开发机器上的主机 IP 或网络上的辅助机器访问它。任何人都知道是否可以使模拟器绑定到所有网络接口,或者有一些其他技巧可以使网络上的其他主机连接到模拟器?

谢谢

【问题讨论】:

  • 使用boutell.com/rinetd 发现了一个丑陋的解决方法,但是拥有两个额外的网络堆栈来进行缓冲和转发确实不理想。

标签: android emulation


【解决方案1】:

我发现 OP 的评论/建议使用 rinetd 比 iptables 容易得多。

rinetd 可以拦截一个接口上的连接,并将它们转发到不同的 IP;因此,为了解决除主机之外的计算机无法访问模拟器的问题,您拦截到主机的传入连接并将它们转发到 127.0.0.1

方法如下:

首先,安装rinetd (http://www.boutell.com/rinetd/)

  • Linux:要么从上面的链接下载它,要么在 Ubuntu 的终端中输入“sudo apt-get install rinetd”。该命令在其他 Linux 发行版中可能有所不同...
  • Windows:从上面的链接下载(但它只显示 95/98/NT..)

接下来,在模拟器中设置端口重定向:

  • 开始您的 AVD
  • 在终端中,输入“telnet localhost 5554”(或您的 avd 端口)
  • 通过telnet连接后,输入“redir add <protocol>:<host port>:<emu port>”(例如“redir add tcp:5000:7000”将发送到主机5000端口的tcp数据转发到模拟器中的7000端口)

配置rinetd:

  • 编辑文件/etc/rinetd.conf 并添加行“<host ip> <host port> 127.0.0.1 <localhost port>”。所以如果你的主机IP地址是123.45.67.89,你想使用5000端口,然后转发到127.0.0.1:5000,“123.45.67.89 5000 127.0.0.1 5000

我不确定 rinetd 是否在您安装后自动启动.. 运行它:

  • /usr/sbin/rinetd

修改配置文件后重新初始化rinetd:

  • cat /var/run/rinetd.pid”显示rinetd的pid
  • sudo kill -1 <pid>”重新初始化它(例如,“sudo kill -1 3225”)

【讨论】:

  • 谢谢老兄。这对我真的很有帮助。
【解决方案2】:

从技术上讲,模拟器在本地环回上绑定套接字。可以从netstat命令看到

$ netstat -an | more
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
...
tcp4       0      0  127.0.0.1.8888         *.*                    LISTEN
...

“本地地址”应为 *.8888,以便从外部访问您的服务。

您唯一的解决方案是将端口从物理接口转发到本地环路。

在 linux 上,这是我了解您正在使用的系统,最简单的方法是通过 iptables 使用任何源接口作为输入和 127.0.0.1 作为目标地址。

您需要管理员权限,但可以在每个会话的基础上完成。

【讨论】:

  • 有人能解释一下达里奥上面所说的怎么做吗?我无法弄清楚 iptables 命令来执行此操作。 > 您唯一的解决方案是 > 将端口从物理 > 接口转发到本地环路。 > > 在 linux 上,这是我 > 了解您正在使用的系统,最简单的 > 方法是通过 iptables > 使用任何源接口作为输入 > 和 127.0.0.1 作为目标地址。谢谢(我会把它作为一个注释放在他的回答下面,但我不知道该怎么做..)
【解决方案3】:

您还可以使用 netcat 进行端口转发。

启动模拟器,然后使用终端运行以下命令:

telnet localhost 5554
redir add tcp:<host port>:<emu port>
quit

设置端口转发:

nc -l -p <external port> -c "nc 127.0.0.1 <host port> -v" -v

如果-c 开关不可用,您可以改用以下选项:

nc -l <external port> | nc 127.0.0.1 <host port> -v

例如,如果您希望其他计算机能够连接到您的 android 模拟器的端口 1234,则您的主机上需要 2 个端口。

  • &lt;host port&gt;:侦听本地接口的端口,然后将消息转发到端口 1234。我们将使用 9200。
  • &lt;external port&gt;:侦听任何接口然后将消息转发到&lt;host port&gt; 的端口。我们将使用 9100。

命令:

redir add tcp:9200:1234
nc -l -p 9100 -c "nc 127.0.0.1 9200 -v" -v

【讨论】:

  • 我想从网络上的其他计算机连接到 telnet,我用这个被骗了。谢谢它很干净。 nc -l 5554 | nc 127.0.0.1 5554 -v
猜你喜欢
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2013-03-22
  • 2018-09-28
相关资源
最近更新 更多