主機訪問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.pswp.cn/news/211427.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211427.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211427.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分銷電商結算設計

概述 分銷電商中涉及支付與結算&#xff1b;支付職責是收錢&#xff0c;結算則是出錢給各利益方&#xff1b; 結算核心圍繞業務模式涉及哪些費用&#xff0c;以及這些費用什么時候通過什么出資渠道&#xff0c;由誰給到收方利益方&#xff1b; 結算要素組成費用項結算周期出…

區塊鏈的可拓展性研究【03】擴容整理

為什么擴容&#xff1a;在layer1上&#xff0c;交易速度慢&#xff0c;燃料價格高 擴容的目的&#xff1a;在保證去中心化和安全性的前提下&#xff0c;提升交易速度&#xff0c;更快確定交易&#xff0c;提升交易吞吐量&#xff08;提升每秒交易量&#xff09; 目前方案有&…

詳解進程管理(銀行家算法、死鎖詳解)

處理機是計算機系統的核心資源。操作系統的功能之一就是處理機管理。隨著計算機的迅速發展&#xff0c;處理機管理顯得更為重要&#xff0c;這主要由于計算機的速度越來越快&#xff0c;處理機的充分利用有利于系統效率的大大提高&#xff1b;處理機管理是整個操作系統的重心所…

前后端聯調神器《OpenAPI-Codegen》

在后端開發完接口之后&#xff0c;前端如果再去寫一遍接口來聯調的話&#xff0c;會很浪費時間&#xff0c;這個時候使用OpenAPI接口文檔來生成Axios接口代碼的話&#xff0c;會大大提高我們的開發效率。 Axios引入 Axios是一個基于Promise的HTTP客戶端&#xff0c;用于瀏覽器…

Go壓測工具

前言 在做Go的性能分析調研的時候也使用到了一些壓測方面的工具&#xff0c;go本身也給我們提供了BenchMark性能測試用例&#xff0c;可以很好的去測試我們的單個程序性能&#xff0c;比如測試某個函數&#xff0c;另外還有第三方包go-wrk也可以幫助我們做http接口的性能壓測&…

C# 任務并行類庫Parallel調用示例

寫在前面 Task Parallel Library 是微軟.NET框架基礎類庫&#xff08;BCL&#xff09;中的一個&#xff0c;主要目的是為了簡化并行編程&#xff0c;可以實現在不同的處理器上并行處理不同任務&#xff0c;以提升運行效率。Parallel常用的方法有For/ForEach/Invoke三個靜態方法…

Element-UI定制化Tree 樹形控件

1.復制 說明&#xff1a;復制Tree樹形控件。 <script> export default {data() {return {data: [{label: 一級 1,children: [{label: 二級 1-1,children: [{label: 三級 1-1-1}]}]}, {label: 一級 2,children: [{label: 二級 2-1,children: [{label: 三級 2-1-1}]}, {l…

Linux:進程優先級與命令行參數

目錄 1.進程優先級 1.1 基本概念 1.2 查看系統進程 1.3 修改進程優先級的命令 2.進程間切換 2.1 相關概念 2.2 Linux2.6內核進程調度隊列&#xff08;了解即可&#xff09; 3.命令行參數 1.進程優先級 1.1 基本概念 cpu資源分配的先后順序&#xff0c;就是指進程的優…

【C++】在類外部定義成員函數時,不應該再次指定默認參數值

2023年12月10日&#xff0c;周日下午 錯誤的代碼 #include<iostream>class A { public:void fun(int a10); };void A::fun(int a10) //<----在這里報錯 {}int main() {} 正確的代碼 代碼目前有一個問題&#xff0c;主要是在類外部定義成員函數時&#xff0c;不應該…

解密QQ號——C語言

題目&#xff1a; 有一串已加密的數字“6 3 1 7 5 8 9 2 4”解密規則&#xff1a;首先將第1個數字刪除&#xff0c;緊接著將第2個數字放到這串數字的末尾&#xff0c;再將第3個數字刪除并將第4個數字放到這串數字的末尾&#xff0c;再將第5個數刪除 代碼實現&#xff1a; #inc…

利用Node.js和cpolar實現遠程訪問,無需公網IP和路由器設置的完美解決方案

文章目錄 前言1.安裝Node.js環境2.創建node.js服務3. 訪問node.js 服務4.內網穿透4.1 安裝配置cpolar內網穿透4.2 創建隧道映射本地端口 5.固定公網地址 前言 Node.js 是能夠在服務器端運行 JavaScript 的開放源代碼、跨平臺運行環境。Node.js 由 OpenJS Foundation&#xff0…

ESP32網絡編程-OTA方式升級固件(基于Web瀏覽器)

OTA方式升級固件(基于Web瀏覽器) 文章目錄 OTA方式升級固件(基于Web瀏覽器)1、ESP32的OTA介紹2、OTA升級固件方式3、軟件準備4、硬件準備5、代碼實現6、一種優雅方式實現Web方式OTA升級6.1 基礎OTA代碼6.2 新固件庫代碼在前面的文章中,我們在Arduino IDE的網絡端口中,實現…

LeetCode 77.組合

題目&#xff1a; 給定兩個整數 n 和 k&#xff0c;返回范圍 [1, n] 中所有可能的 k 個數的組合。 你可以按 任何順序 返回答案。 方法&#xff1a;靈神-組合型回溯 剪枝 class Solution {private int k;private final List<Integer> path new ArrayList<>();…

反序列化 [網鼎杯 2020 朱雀組]phpweb 1

打開題目 我們發現這個頁面一直在不斷的刷新 我們bp抓包一下看看 我們發現index.php用post方式傳了兩個參數上去&#xff0c;func和p 我們需要猜測func和p兩個參數之間的關系&#xff0c;可以用php函數MD5測一下看看 我們在響應處得到了一串密文&#xff0c;md5解密一下看看 發…

Windows11安裝使用Oracle21C詳細步驟<圖文保姆級>新版本

Windows11安裝使用Oracle21C詳細步驟<圖文保姆級>新版本 Database Software Downloads | Oracle 中國 下載完成后解壓縮 雙擊setup.exe 打開安裝頁面 同意下一步 更改自己的路徑點擊下一步 輸入密碼 下一步安裝等待即可 等待加載配置時間有點久 完成即可 使用 搜索…

【Kubernetes】四層代理Service

Service四層代理 一、Service概念原理1.1、為什么要有Service1.2、Service概述1.3、工作原理1.4、三類IP地址【1】Node Network&#xff08;節點網絡&#xff09;【2】Pod network&#xff08;pod 網絡&#xff09;【3】Cluster Network&#xff08;服務網絡&#xff09; 二、S…

C++之異常處理

C語言傳統的處理錯誤的方式 傳統的錯誤處理機制&#xff1a; 1. 終止程序, 如assert. 缺陷: 用戶難以接受, 如發生內存錯誤, 除0錯誤時就會終止程序. 如果assert括號里面的表達式結果為假, 那么assert就會中斷程序并報錯, 所以使用assert可以幫助我們在程序判斷一些可能出錯的…

翻轉二叉樹(圖解、前序遍歷、遞歸與非遞歸)

LCR 144. 翻轉二叉樹 - 力扣&#xff08;LeetCode&#xff09; 給定一棵二叉樹的根節點 root&#xff0c;請左右翻轉這棵二叉樹&#xff0c;并返回其根節點。 示例 1&#xff1a; 輸入&#xff1a;root [5,7,9,8,3,2,4] 輸出&#xff1a;[5,9,7,4,2,3,8] 提示&#xff1a; …

【11】Qt Designer

目錄 VSCode添加外部工具 QtDesigner PyUIC PyRCC 加載UI文件模板代碼 QMainWindow QWidget 常用知識點 1. 修改標題圖標 2. 圖片資源管理 3. 圖片按鈕 4. 加載對話框 5. 動態加載Widget 6. 修改主題 其他注意事項 事件被多次觸發 PyQt5提供了一個可視化圖形工…

【小沐學Python】Python實現WebUI網頁圖表(gradio)

文章目錄 1、簡介2、安裝3、基本測試3.1 入門代碼3.2 組件屬性3.3 多個輸入和輸出組件3.4 圖像示例3.5 聊天機器人3.6 模塊&#xff1a;更靈活、更可控3.7 進度條 結語 1、簡介 https://www.gradio.app/ Gradio是用友好的網絡界面演示機器學習模型的最快方法&#xff0c;因此…