首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android模拟器从其他主机访问redir端口

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

Stack Overflow用户
提问于 2010-10-27 20:17:54
回答 3查看 12.5K关注 0票数 5

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

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-28 00:42:08

从技术上讲,仿真器在本地环回上绑定套接字。您可以从netstat命令中看到它

代码语言:javascript
复制
$ 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
EN

Stack Overflow用户

发布于 2011-02-02 01:21:28

我发现OP关于使用rinetd的评论/建议比iptables简单得多。

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

下面是操作步骤:

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

Ubuntu

  • Linux:从上面的链接下载,或者在的终端中输入"sudo apt-get install rinetd“。从上面的链接下载的其他Linux distros...
  • Windows:中的命令可能不同(但它只显示95/98/NT..)

接下来,在仿真器中设置端口重定向:

  • 在终端中启动avd
  • ,输入"telnet localhost 5554“(或您的avd的任何端口)
  • 通过远程登录连接后,输入"redir add <protocol>:<host port>:<emu port>”(例如,"redir add tcp:5000:7000“将发送到主机上端口5000的tcp数据转发到模拟器中的端口7000 )<代码>H218<代码>F219

配置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
  • "sudo kill -1 <pid>”重新初始化它的pid (例如,"sudo kill -1 3225")
票数 6
EN

Stack Overflow用户

发布于 2014-01-07 12:06:13

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

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

代码语言:javascript
复制
telnet localhost 5554
redir add tcp:<host port>:<emu port>
quit

设置端口转发:

代码语言:javascript
复制
nc -l -p <external port> -c "nc 127.0.0.1 <host port> -v" -v

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

代码语言:javascript
复制
nc -l <external port> | nc 127.0.0.1 <host port> -v

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

侦听本地接口的

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

命令:

代码语言:javascript
复制
redir add tcp:9200:1234
nc -l -p 9100 -c "nc 127.0.0.1 9200 -v" -v
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4033046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档