Android模拟器从其他主机访问redir端口

时间:2010-10-27 12:17:54

标签: android emulation

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

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

由于

3 个答案:

答案 0 :(得分:6)

我发现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”)

答案 1 :(得分: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作为目标地址。

您需要管理员权限,但可以按会话进行。

答案 2 :(得分:0)

您也可以使用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个端口。

  • <host port>:侦听本地接口的端口然后将消息转发到端口1234.我们将使用9200。
  • <external port>:侦听任何接口的端口然后将消息转发给<host port>。我们将使用9100。

命令:

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