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

Thi*_*ish 2 android emulation

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

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

谢谢

mic*_*moo 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")


Dar*_*rio 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
...
Run Code Online (Sandbox Code Playgroud)

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

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

在 Linux(据我所知您正在使用的系统)上,最简单的方法是通过 iptables 使用任何源接口作为输入并使用 127.0.0.1 作为目标地址。

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