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

news2024/12/25 12:16:25

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.coloradmin.cn/o/1305095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙系统最近删除文件夹的路径

鸿蒙手机上删除文件&#xff0c;会将文件移动到类似回收站的路径下&#xff0c;如何找到这个路径&#xff1f; 先找用文件管理器找到一个文件 比如aaa.jpg &#xff0c;这时在调试的shell下面运行 find . -name aaaa.jpg 得到如下 这时再删除该文件 再次运行 find . -name a…

小白如何启用和使用ChatGPT4插件的详细步骤演示

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

野牛物联网-OneNET配置教程

1、 本文愿景 OneNET物联网开放平台是中国移动打造的面向产业互联和智慧生活应用的物联网PaaS平台&#xff0c;也是市面上主流物联网云平台之一&#xff0c;野牛物联网为了便利大家&#xff0c;在此编写了配置接入该平台完整的一个流程。 2、 OneNET平台注册和配置 2.1、 注…

STL 源码剖析

临时对象的产生与运用 #include <stdio.h> #include<stdlib.h> #include<iostream> #include<vector> #include<algorithm> using namespace std;template <typename T> class print { public:void operator()(const T& elem){cout &…

ubuntu 20.04.6 server 服务器 下载与安装(配置静态IP)

下载地址&#xff1a;https://releases.ubuntu.com/20.04.6/ubuntu-20.04.6-live-server-amd64.iso 第一步&#xff1a; 准备U盘&#xff0c;使用软碟通将下载好的镜像写入到U盘中 软碟通网址&#xff1a;https://www.cn.ultraiso.net/xiazai.html 点击&#xff1a;文件 ->…

交换机配置本地端口镜像示例(1:1)

镜像概念 定义 镜像是指将指定源的报文复制一份到目的端口。指定源被称为镜像源&#xff0c;目的端口被称为观察端口&#xff0c;复制的报文被称为镜像报文。 镜像可以在不影响设备对原始报文正常处理的情况下&#xff0c;将其复制一份&#xff0c;并通过观察端口发送给监控…

【LeetCode-树】-- 109.有序链表转换二叉搜索树

109.有序链表转换二叉搜索树 方法&#xff1a;找到链表的中点&#xff0c;将其作为根节点 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNo…

SpringBoot集成系列--Kakfa

文章目录 一、代码1、添加依赖2、配置kafka3、创建生产者4、创建消费者5、测试 二、遇到问题1、could not be established. Broker may not be available2、Error while fetching metadata with correlation id xxx 一、代码 1、添加依赖 在pom.xml文件中添加Kafka的依赖 &l…

NFC物联网解决方案应用实例:基于NFC的通用物流链防伪溯源

NFC物联网系统解决方案已在某局进行推广应用&#xff0c;给出了某省内出口蔬菜水果检验检疫监管的物联网解决方案。 依据相关法规&#xff0c;出口蔬菜必须在质检总局注册种植基地进行种植&#xff0c;出口前按批次向产地检验检疫部门进行申报&#xff0c;按时在集中监管区统一…

Leetcode—2961.双模幂运算【中等】

2023每日刷题&#xff08;五十六&#xff09; Leetcode—2961.双模幂运算 实现代码 class Solution { public:int func(int a, int b) {int ans 1;for(int i 0; i < b; i) {ans * a;ans % 10;}return ans;}int func2(int a, int b, int m) {int ans 1;for(int i 0; i …

通过pull request执行结果运行自动化测试脚本

前提条件 已安装 Jenkins&#xff0c;并且安装插件Generic Webhook Trigger Plugin 配置 Jenkins创建一个 pipeline项目如图所示在Jenkins任务的build triggers中勾选Generic Webhook Trigger, 并且填写token在代码仓库管理平台&#xff08;截图的是bitbucket)&#xff0c;配…

Python之Requests库使用总结

概述 Requests是python中一个很Pythonic的HTTP库&#xff0c;用于构建HTTP请求与解析响应 Requests开发哲学 Beautiful is better than ugly.(美丽优于丑陋) Explicit is better than implicit.(直白优于含蓄) Simple is better than complex.(简单优于复杂) Complex is bett…

充电宝详解及推荐

一、充电宝选购攻略 二、充电宝的分类 &#xff08;1&#xff09;常规充电宝&#xff08;慢充&#xff09; 就是输出电压5V &#xff0c;输出电流1A或者2A的这种。 按照功率计算公示&#xff1a;PU*I&#xff0c; 这种充电宝给手机充电最快也就是&#xff1a;5.1V2.1A10.71W…

SpringBoot+Netty+Websocket实现消息推送

这样一个需求&#xff1a;把设备异常的状态每10秒推送到页面并且以弹窗弹出来&#xff0c;这个时候用Websocket最为合适&#xff0c;今天主要是后端代码展示。 添加依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifact…

springboot3.2.x支持虚拟线程

背景&#xff1a; 大家都知道jdk21已经发布一段时间了&#xff0c;springboot3.2开始正式支持虚拟线程了&#xff1b; 支持虚拟线程&#xff1a; 1、spring.threads.virtual.enabledtrue 开启虚拟线程 2、Servlet Web 服务器 当启用虚拟线程时&#xff0c;Tomcat和Jetty将使…

KubeSphere应用【二】Docker安装

一、Docker安装 1.下载Docker安装包 【地址】Index of linux/static/stable/x86_64/ 2.上传至服务器 # 解压文件 tar -xvf docker-20.10.10.tgz# 将docker 目录中的所有文件复制至/usr/bin/目录下 cp docker/* /usr/bin 3.配置docker.service文件 vim /usr/lib/systemd/sy…

Make pixels dance:high-dynamic video generation

1.Introduction 大多数视频生成主要关注文本到视频的生成&#xff0c;PixelDance在文本指令的基础上&#xff0c;将图像指令分别用于视频剪辑的第一帧和最后一帧&#xff0c;第一帧图像指令描绘了视频剪辑的主要场景&#xff0c;最后一帧图像是可选的&#xff0c;描述了剪辑的…

2024年AI云计算专题研究报告:智算带来的变化

今天分享的人工智能系列深度研究报告&#xff1a;《2024年AI云计算专题研究报告&#xff1a;智算带来的变化》。 &#xff08;报告出品方&#xff1a;华泰证券&#xff09; 报告共计&#xff1a;32页 Al 云计算 2024:关注智算带来的新变化 通过对海内外主要云厂商及其产业链…

HarmonyOS 的应用开发语言:ArkTS

本心、输入输出、结果 文章目录 HarmonyOS 的应用开发语言&#xff1a;ArkTS前言ArkTS 产生背景ArkTS 语言特点ArkTS 基本语法ArkTS 声明式 UIArkTS 状态管理ArkTS 渲染控制 ArkTS 轻量化并发机制ArkTS 相关文档花有重开日&#xff0c;人无再少年实践是检验真理的唯一标准 Harm…

mysql语句大全及用法

常用的MySQL语句和简要用法&#xff0c;以帮助你开始学习和使用MySQL。 连接数据库 mysql -u username -p在命令行中使用以上命令来连接到MySQL数据库服务器。username 是你的MySQL用户名&#xff0c;执行后会提示输入密码。 显示数据库 SHOW DATABASES;列出数据库服务器上…