草庐IT

android - 同时接入WiFi局域网(无网关)和移动网络

coder 2023-07-28 原文

我知道之前有人问过这个问题(解决方案有限或没有解决方案),但我没有看到任何最近的更新,我认为我的情况很独特,所以我将开始一个新线程。

我有一个 Raspberry Pi,除其他外,它还用作热点。按照设计,DHCP 不会分发默认网关。我的用例是一个或多个设备作为服务器与 Pi 交互。

其中一个连接的设备将是移动设备(编辑:运行我设计的自定义应用程序,这是整体解决方案的一部分),并且该设备将保持其蜂窝连接,而不是用于网络共享或路由,以便应用程序可以同时访问内部和外部资源。

目前:

IOS:这与我在 IOS 上的预期完全一样 - 它感应到 WiFi 网络没有默认网关并通过单元发送外部流量。

Android:这根本行不通。 Android 顽固地看到 WiFi 已连接并禁用蜂窝网络,即使没有默认网关也是如此。

Windows Phone:有点像混合体。两个网络都保持运行,但我的场景在公共(public) DNS 中有一个 DNS 条目,并且一个公共(public)站点链接到 Pi 上的资源。如果我直接使用 Pi 的 WiFi IP 地址链接到资源,它工作正常(尽管这会导致其他与安全相关的问题)。如果我通过 FQDN 链接,我实际上不确定发生了什么。尽管我在手机上安装的用于故障排除的每个网络实用程序都通过 DNS 将 FQDN 正确解析为 Pi 地址,但它无法从 Web 浏览器解析。

希望这是有道理的。问题:如何在 2015 年全面启用此功能? :) 就我的目的而言,Pi 作为私有(private)不可路由热点比 WiFi direct 或蓝牙效果更好。请记住,我不是在要求电话 ROUTE;我需要我的自定义应用程序能够同时连接到 Pi 和公共(public)互联网。我希望所有的手机都能像 IOS 在这方面所做的那样。

我目前的情况是 Pi 托管网页(除其他外),这是我的偏好,但这甚至可以在本地解决吗?

最佳答案

你说这不是网络共享或路由情况,但如果你仔细想想,它确实是两者兼而有之。

它是路由,因为来自电话的流量需要路由到两个接口(interface)之一。 通过 电话可能没有路由,但这仍然是一个路由问题。幸运的是,路由部分似乎在所有三个平台上都能正常工作。

这也是一种不寻常的网络共享形式。唯一的区别是流量不是来自 Pi,而是来自手机,并且 Pi 而不是手机作为接入点。

从网络共享的角度考虑它很重要,因为它表明 Android 可以同时激活 WiFi 和蜂窝网络(至少在热点模式下,但也可能在客户端模式下)。在这方面,我的回答并不完整 - 我无法告诉您如何完成。

至于您提到的 Windows Phone 问题:为了解决该问题,首先确定了解 Pi 的 FQDN 的 DNS 服务器所在的位置。公共(public) DNS 服务器是否知道它,即使它显然位于专用网络上?

您的观察有两种可能的解释:

  • 甚至没有知道此 FQDN 的公共(public) DNS 服务器。在那种情况下,IOS 可能会使用诸如 mDNS 之类的东西来定位 Raspberry Pi。
  • 一个知道这个 FQDN 的公共(public) DNS 服务器。在那种情况下,Windows Phone 可能会检查火星人的 DNS 回复并拒绝它,认为这是一次攻击。

无论哪种方式,您真正需要的是拥有两个独立的 DNS 基础设施。一种方法是在您的应用程序中包含一个小型 DNS 服务器(可能是 dnsmasq),并使用 Pi 的 FQDN 配置该区域的转发器以转发到 Pi 的 IP 地址(显然必须进行硬编码)。所有其他请求都应该发送到正常的 DNS 服务器。

另一种方法可能是根本不使用 DNS,而是使用主机文件。

关于android - 同时接入WiFi局域网(无网关)和移动网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28403627/

有关android - 同时接入WiFi局域网(无网关)和移动网络的更多相关文章

  1. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. ruby-on-rails - 与 ActiveMerchant 一起使用的最佳支付网关是什么? - 2

    我需要使用ActiveMerchant库在我们的一个Rails应用程序中设置支付解决方案。尽管这个问题非常主观,但人们对主要网关(BrainTree、Authorize.net等)的体验如何?它必须:处理定期付款。有能力记入个人帐户。能够取消付款。有办法存储用户的付款详细信息(例如Authotize.netsCIM)。干杯 最佳答案 ActiveMerchant很棒,但在过去一年左右的时间里,我在使用它时发现了一些问题。首先,虽然某些网关可能会得到“支持”——但并非所有功能都包含在内。查看功能矩阵以确保完全支持您选择的网关-http

  4. ruby - 使用 ruby​​ gem net-ssh-multi 同时在多个服务器上执行 sudo 命令 - 2

    在previousquestion中我想出了如何在多个服务器上启动经过密码验证的sshsession来运行单个命令。现在我需要能够执行“sudo”命令。问题是,net-ssh-multi没有分配sudo需要运行的伪终端(pty),导致以下错误:[127.0.0.1:stderr]sudo:sorry,youmusthaveattytorunsudo根据documentation,可以通过调用channel对象的方法来分配伪终端,但是,以下代码不起作用:它会生成上面的“notty”错误:require'net/ssh'require'net/ssh/multi'Net::SSH::Mul

  5. Ruby:net/http 可以同时发起 GET 和 POST 请求吗? - 2

    是否可以同时传递GET和POST参数?uri=URI.parse("http://www.example.com/post.php?a=1&b=2")req=Net::HTTP::Post.new(uri.path,{'Referer'=>"http://www.example.com/referer",'User-Agent'=>"Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)",'Cookie'=>$cookie})req.set_form_data({'foo'=>'bar','bar'=>'foo'})http=Net::HTTP.ne

  6. ruby - 如何制作同时针对 MRI 和 JRuby 的 gem? - 2

    我想制作一个gem,当其他人尝试将它与MRI一起使用时,它将使用C代码,而当他们从JRuby中使用它时,它将使用Java代码。nokogiri和pumagems就是这样做的,我看过他们的代码,但没有看到他们是如何实现的。 最佳答案 这是通过使用rvm(或其他类似工具在rubies之间切换)和rake-compiler为您针对的不同平台交叉编译gem来完成的。.gemspec文件必须指定每个平台所需的文件;这是通过检查gem正在编译的平台来完成的:Gem::Specification.newdo|gem|#...ifRUBY_PLAT

  7. ESP32学习入门:WiFi连接网络 - 2

    目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方

  8. ruby - 在保留所有 gem 的同时通过 rvm 升级到 Ruby 2.3 的最佳方法? - 2

    通过rvm升级到Ruby2.3的最佳方法是什么,同时保持所有gem安装在以前的版本上(例如json、nokogiri、等等)? 最佳答案 编辑这个问题在这里有答案:RVM:Howtousegemsfromadifferentruby?$rvmgemsetcopy$oldversion2.3.0##Assignorreplace$oldversionwitholdversionname原创在安装Ruby2.3之前,使用gemlist获取已安装的gem及其版本的列表。然后,在安装Ruby2.3之后,使用rvm将2.3设置为新的默认值:$

  9. ruby-on-rails - Ruby 中的存储库或网关模式 - 2

    如何在Ruby中实现存储库或网关模式?我来自C#世界,我通常抽象出我的数据访问,但是使用ActiveRecord作为Ruby中的默认数据访问机制,如何实现这一点并不明显。我通常在C#中做的是使用抽象接口(interface),然后为ECFustomerRepository、NHibernateCustomerRepository和InMemoryCustomerRepository以及依赖具体实现在这种情况下我注入(inject)了匹配的具体实现。那么现在,Ruby方式是什么?!据我所知,在动态语言中你不需要像DI(依赖注入(inject))这样的东西。而且Ruby具有强大的语言特性,

  10. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

随机推荐