主机访问Android模拟器网络服务方法

0x00 背景

因为公司的一个手机app的开发需求,要尝试链接手机开启的web服务。于是在Android Studio的Android模拟器上尝试连接,发现谷歌给模拟器做了网络限制,不能直接连接。当然这个限制似乎从很久以前就存在了。一直没有注意到。

0x01 Android 网络地址空间

模拟器的每个实例都在虚拟路由器或防火墙服务后面运行,这样便将其与开发机器网络接口和设置以及互联网隔离开来。所以

  1. 无法直接从PC访问到模拟器;
  2. 也无法从模拟器直接访问开发机器PC;
  3. 也无法直接从这个模拟器访问到另一个模拟器;

每个实例的虚拟路由器管理 10.0.2/24 网络地址空间。路由器管理的所有地址都采用 10.0.2.xx 形式,其中 xx 是一个数字。此空间内的地址由该模拟器或其路由器预先分配,具体说明如下:

网络地址说明
10.0.2.1路由器或网关地址
10.0.2.2主机环回接口的特殊别名(开发机器上的 127.0.0.1)
10.0.2.3第一个 DNS 服务器
10.0.2.4 / 10.0.2.5 / 10.0.2.6可选的第二个、第三个和第四个 DNS 服务器
10.0.2.15所模拟设备的网络或以太网接口
127.0.0.1所模拟设备的环回接口

如果要实现从这个模拟器访问到另一个模拟器的场景,可以参考官网的说明–互连模拟器实例【传送门】。这里大概说明下原理:就是先让模拟器A和模拟器B都分别连到开发主机,用开发主机做中转。
这里有个重点:
在Android模拟器上访问10.0.2.2地址就可以访问到开发主机的localhost了。

0x02 模拟器端口映射到本地(开发机)

端口映射有两种方法:

  1. 通过模拟器控制台设置重定向
  2. Android 调试桥 (adb) 工具

2.1 通过模拟器控制台设置重定向

第一步, 通过命令行连接到模拟器控制台,启动的第一个模拟器实例的控制台端口号为 5554。
在这里插入图片描述
第二步, 登录授权,输入 auth <auth_token> 命令。
<auth_token>已经在上面命令的倒数第二行提供路径,我这里是:

/Users/用户名/.emulator_console_auth_token

打开文件可以看到一行token,复制过来,带入到命令中执行即可:

auth rsEGo86el0Kwomvp

成功授权后返回OK

第三步,端口映射
执行如下命令,将Android模拟器的6000端口映射到开发主机的5000端口,这样开发主机即可访问到模拟器开的6000端口服务了。

redir add tcp:5000:6000

使用 redir 命令来处理重定向。

如需添加重定向,请使用以下命令:

redir add <protocol>:<host-port>:<guest-port>

其中,<protocol> 是 tcp 或 udp,<host-port><guest-port> 用来设置自己的PC机器与Android 模拟器的系统之间的映射。

第四步,删除端口映射
redir del: 删除一条转发规则,命令格式如下:

redir <protocol>:<hostport>

举例:

redir del tcp:5000

第五步,退出控制台,使用quit或者exit命令

2.2 通过 adb 设置重定向

Android 调试桥 (adb) 工具提供端口转发功能,这是设置网络重定向的另一种方法。官方说明【传送门】

可以使用 forward 命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。以下示例设置了主机端口 6100 到Android 模拟器端口 7100 的转发:

adb forward tcp:6100 tcp:7100

以下示例设置了主机端口 6100 到 local:logd 的转发:

adb forward tcp:6100 local:logd

请注意,除了停止 adb 服务器,adb 目前不提供移除重定向的方法。

上面这句话是官网抄来的,半天没有理解说的是什么。懂了似乎又没懂。懂了的可以跳过本段。这里翻译下:端口映射的规则一旦使用,没办法像删除路由那样删除映射规则。唯一的办法就是关掉adb服务。

停止 adb 服务器
如需停止 adb 服务器,请使用 adb kill-server 命令。然后,您可以通过发出其他任何 adb 命令来重启服务器。

0x03 模拟器访问本地(开发机)

如开篇所讲,本地PC的地址会被映射成10.0.2.2,用localhost或者127.0.0.1是访问不到的。在模拟器的浏览器访问试试。
在这里插入图片描述

0x04 tips

  1. 想要进一步了解Andrioid 控制台操作命令的同学可以移步到官网【传送门】;
  2. 10.0.2.2这个本地ip映射的机制至少在Android emulator2.0版本就存在了,大约是2009年,可能在1.0版本就在了。没错,很早就这样了。
  3. 10.0.2.2曾经有一个从浏览器就能开起反弹shell的漏洞(CVE-2010-1807),有趣的是这本来是苹果safari的任意代码执行漏洞,在安卓也能用,配合这个ip:10.0.2.2就能从开发主机访问到模拟器的shell了。【传送门】

0x05 参考文献

https://developer.android.com/studio/run/emulator-networking?hl=zh-cn
https://m.imooc.com/wiki/androidstudio-emulatorconsole
https://developer.aliyun.com/article/270580
https://blog.csdn.net/learner_lps/article/details/52451464

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/215809.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python编程技巧 – 使用组合运算符

Python编程技巧 – 使用组合运算符 Python Programming Skills – Using Combined Operators Python通过赋值过程&#xff0c;将声明变量与赋值和而为之&#xff0c;可谓讲求效率。此外&#xff0c;在Python赋值运算符里&#xff0c;也有一个强大高效的功能&#xff0c;即复合…

赴美上市传闻再起,SHEIN走到十字路口

作者 | 辰纹 来源 | 洞见新研社 裹挟着“黑五”大胜的余波&#xff0c;跨境电商巨头SHEIN&#xff08;希音&#xff09;将赴美IPO的传闻又在行业中散播开来。 金融投资报称SHEIN此次IPO的估值或达900亿美元&#xff1b;上海证券报表示&#xff0c;SHEIN已对投资人发出了路演…

字符设备驱动开发基础

一. 简介 本文简单了解一下&#xff0c;在字符设备驱动开发开始前对其一些基本认识。简单了解一下&#xff0c;应用程序与驱动的交互原理&#xff0c;以及字符设备驱动开发流程。 二. 字符设备驱动开发流程 1. 在 Linux 中一切皆为文件&#xff0c;驱动加载成功以后会在“…

Camunda 7.x 系列【60】流程分类

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 前言2. 案例演示2.1 后端2.2 前端2.3 测试1. 前言 钉钉中的OA审批分类: 企业级的业务…

vue2 echarts饼状图,柱状图,折线图,简单封装以及使用

vue2 echarts饼状图&#xff0c;柱状图&#xff0c;折线图&#xff0c;简单封装以及使用 1. 直接上代码&#xff08;复制可直接用&#xff0c;请根据自己的文件修改引用地址&#xff0c;图表只是简单封装&#xff0c;可根据自身功能&#xff0c;进行进一步配置。&#xff09; …

优雅玩转实验室服务器(二)传输文件

使用服务器最重要的肯定是传输文件了&#xff0c;我们不仅需要本地的一些资源上传到服务器&#xff0c;好进行实验&#xff0c;也需要将服务器计算得到的实验结果传输到本地&#xff0c;来进行预览或者报告撰写。 首先&#xff0c;由于涉及到服务器操作&#xff0c;我强烈推荐…

Jemeter,提取响应体中的数据:正则表达式、Json提取器

一、正则表达式 1、线程组--创建线程组&#xff1b; 2、线程组--添加--取样器--HTTP请求&#xff1b; 3、Http请求--添加--后置处理器--正则表达式提取器&#xff1b; 4、线程组--添加--监听器--查看结果树&#xff1b; 5、线程组--添加--取样器--调试取样器。 响应体数据…

UI5 development on VS Studio code

今天来分享一下如何VS studio code 上UI5开发环境的搭建 1.安装Node.js 路径&#xff1a;Node.js 因安装步骤较为简单&#xff0c;故不在此赘述。 验证方法如下&#xff1a;WINR-->CMD--->node --version 出现下图即可 2. 安装UI5 CLI (为了后面我们方便使用UI5 的命令…

本地部署语音转文字(whisper,SpeechRecognition)

本地部署语音转文字 1.whisper1.首先安装Chocolatey2.安装3.使用 2.SpeechRecognition1.环境2.中文包3.格式转化4.运行 3.效果 1.whisper 1.首先安装Chocolatey https://github.com/openai/whisper 以管理员身份运行PowerShell Set-ExecutionPolicy Bypass -Scope Process -…

【JVM从入门到实战】(一) 字节码文件

一、什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。 JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 二、JVM的功能 解释和运行 对字节码文件中的指令&#xff0c;实时的解释成机器码&#xff0c;让计算机…

ubuntu20 安装docker

一.官网安装文档 &#xff08;基本按官方文档安装&#xff09; Install Docker Engine on Ubuntu | Docker Docs 二.安装步骤 1.docker 需要64位操作系统、linux内核要在3.1以上 #uname -r 2.卸载可能存在的旧版本 #sudo apt-get remove docker docker-engine docker-ce …

Redis rdb源码解析

前置学习&#xff1a;Redis server启动源码-CSDN博客 1、触发时机 1、执行save命令--->rdbSave函数 2、执行bgsave命令--->rdbSaveBackground函数或者&#xff08;serverCron->prepareForShutdown&#xff09; 3&#xff0c;主从复制-->startBgsaveForReplication…

图文教程:stable-diffusion的基本使用教程 txt2img(多图)

之前我介绍了SD的安装过程&#xff0c;那么这篇将介绍怎么使用SD 使用模型 SD安装好之后&#xff0c;我们只有一个默认的模型。这个模型很难满足我们的绘图需求&#xff0c;那么有2种方法。 1是自己训练一个模型&#xff08;有门槛&#xff09;2是去网站上找一个别人练好的模…

分布式ID服务实践

背景 分布式场景下需要一个全局 ID 来标识唯一性&#xff0c;比如在单数据库时通过表唯一主键即可实现唯一 ID&#xff0c;分库分表时就需要全局唯一 ID。 业务对唯一 ID 的要求如下&#xff1a; 全局唯一性 不能出现重复的 ID 号&#xff0c;既然是唯一标识&#xff0c;这…

一文讲解关于MCU启动原理的几个关键问题

MCU最开始一启动后去哪里读代码&#xff1f; CPU上电启动后被设计为去地址0x00000000位置处读取代码&#xff1b;首先会连续读取两个字&#xff0c;分别是栈指针初始值和复位异常处理函数的地址&#xff1b;然后跳去执行复位异常处理函数。 当然在一些早期的ARM处理器设计中&a…

hive自定义函数及案例

一.自定义函数 1.Hive自带了一些函数&#xff0c;比如&#xff1a;max/min等&#xff0c;但是数量有限&#xff0c;自己可以通过自定义UDF来方便的扩展。 2.当Hive提供的内置函数无法满足你的业务处理需要时&#xff0c;此时就可以考虑使用用户自定义函数。 3.根据用户自定义…

思维链(CoT)提出者 Jason Wei:关于大语言模型的六个直觉

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 Jason Wei 的主页&#xff1a;https://www.jasonwei.net/ Jason Wei&#xff0c;一位于 2020 年从达特茅斯学院毕业的杰出青年&#xff0c;随后加盟了…

Wireshark中的http协议包分析

Wireshark可以跟踪网络协议的通讯过程&#xff0c;本节通过http协议&#xff0c;在了解Wireshark使用的基础上&#xff0c;重温http协议的通讯过程。 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于 字节流…

Windows/Linux混合刻录后,Windows显示空白盘解决思路

概述 因为工作环境问题&#xff0c;需要在Windows和Linux之间来回光盘刻录&#xff0c;没有多余光盘的时候经常多次使用&#xff0c;同一光盘在Windows刻录文件到Linux&#xff0c;然后从Linux刻录文件到Windows&#xff0c;Windows用“类似U盘”格式化的光盘&#xff0c;在Wi…

005、Softmax损失

之——softmax与交叉熵 杂谈 我们常用到softmax函数与交叉熵的结合作为损失函数以监督学习&#xff0c;这里做一个小小的总结。 正文 1.softmax的基本改进 所谓softmax就是在对接全连接层输出时候把输出概率归一化&#xff0c;最基础的就是这样&#xff1a; 效果就是这样&…