标签: captiveportal

如何使用NetworkRequest.Builder()指定wifi网络.setNetworkSpecifier(string)

我正在寻找一种让Android 5.0平板电脑连接到内部网的方法,出于安全考虑,该内部网没有互联网连接.

问题是谷歌自4.4/5.0以来在Android中构建的强制门户保护.对android connectivitycheck进行调用以检查互联网连接,当此呼叫失败时,wifi网络被标记为不工作并避免.很蹩脚.

其他人遇到了同样的问题,有些人建议使用android 5中引入的新API,请参阅: Android 5.0 Lollipop和4.4 KitKat忽略了我的WiFi网络,enableNetwork()无用

关于此的文件非常含糊:

NetworkRequest.Builder.setNetworkSpecifier(String  networkSpecifier)
Run Code Online (Sandbox Code Playgroud)

"对此字符串的解释是特定于承载的,使用它的承载者应记录其详细信息.例如,蓝牙可能使用某种设备ID,而WiFi可能使用ssid和/或bssid.蜂窝可能使用载波spn"

我试过这个并没有用.主要问题是,一旦我使用 setNetworkSpecifier()没有网络被发现.我尝试使用bssid(mac)和ssidAP.

看起来过滤器正在工作,但不清楚它应该如何工作.如果我省略了setNetworkSpecifier()呼叫1网络,但无法确定哪个.至少它显示我的代码有效.

那么如果ssid和bssid不起作用,我应该在这里放什么?

这是我的代码.

 private void connect(String ssid, Context context) {
    Log.i(TAG, "try connect to! " + ssid);
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkRequest nr = new NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).
                removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED).
                removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET

                setNetworkSpecifier(ssid). //<--- here is the problem
                build();
        ConnectivityManager.NetworkCallback callback 
             = new ConnectivityManager.NetworkCallback() {
                @Override
                public void onAvailable(Network network) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                        Log.i(TAG, "onAvailable …
Run Code Online (Sandbox Code Playgroud)

networking android android-wifi captiveportal

13
推荐指数
2
解决办法
4398
查看次数

iPhone/Android不会忽略使用DNS实现的wifi登录页面

我正在尝试在我现有的公共wifi网络上实现启动页面/ wifi登陆页面,使用Wiki提到的DNS方法,我在其中托管自定义DNS服务器,将所有dns查找重定向到Web服务器的本地地址托管,为所有用户点击同意之前.

用户点击同意后,我的自定义DNS服务器开始返回正确的IP以进行查找,因此,用户将能够上线.

注意:我们完全理解这不会保护我们的网络,甚至使我们的网络面临风险.但这里的目标只是在我们的用户面前弹出登陆页面.

这种方法实际上适用于Windows Phone(我测试的Windows 8)作为启动页面,甚至在我尝试打开随机网站的计算机上,它将我重定向到我的页面,在我同意后,我可以上网.

当我在iPhone/Android上试用它时,一旦我连接到热点,启动页面/ wifi登陆页面就会出现预期(因为设备试图通过转到页面集来验证互联网访问)但是,在我点击同意之后,并允许互联网访问,iPhone和Android闪屏都不会消失.我必须强迫iphone"使用这个没有网络的wifi"退出.

我想知道是否有一个我可以在页面中调用的特殊(javascript?)方法,或者我需要发送给设备的一些软件包?我注意到在iOS上,如果我点击指向App Store的链接,那么启动页面会在不断开网络的情况下消失,所以,我想我在这里遗漏了一些东西.

例如,单击iOS设备上iOS StackOverflow App的链接可以解决此问题.

现在谷歌搜索了一个星期,似乎没有任何东西出现.

顺便说一句,我在节点js上使用模块dnsd构建我的自定义dns服务器.

= - = - =

= - = - = - = - = edit = - = - = - = - = - =

我还在GitHub上传了我的代码演示:https: //github.com/kylelam/dnsd_wifi

要测试它,请在本地网络中运行它(sudo node demo.js).然后,将手机的dns更改为机器的IP.断开手机与wifi的连接并再次连接.(在iOS上,您可能需要详细介绍,启用自动登录和自动加入,或者如果不能,只需重新启动.)

*note1:服务器需要在端口53和80上运行,因此需要sudo.

*note2:请不要嘲笑我的代码,我对此很新.但请指出.

*note3:你需要npm安装这些软件包:os,express,dns,dnsd

dns node.js ios express captiveportal

9
推荐指数
1
解决办法
338
查看次数

如何从Android上的captive打开默认浏览器

我们正在开发WiFi认证解决方案,该解决方案应该在连接到WiFi之后将用户重定向到特定页面.

在我们面临问题的Android设备上.一旦用户点击窗口小部件中的通知,captive就会立即打开和关闭,默认浏览器不会打开.有人可以建议最好的方法吗?或者甚至不可能直接从俘虏打开默认浏览器?

我们正在使用Mikrotik硬件

redirect android wifi mikrotik captiveportal

8
推荐指数
0
解决办法
1381
查看次数

Google OAuth 2.0和带有嵌入式浏览器的Captive门户

Android和IOS设备均具有检测Guest Wifi网络上的强制门户的机制。每当检测到强制门户时,这些设备就会启动嵌入式浏览器以显示强制门户。

我的强制门户网站允许我的访客wifi使用其Google身份验证凭据,以允许访问我的wifi。

门户网站会触发带有Google服务的OAuth 2.0,并获取用户个人资料。

一切正常,不幸的是,Google决定于4月22日停止在嵌入式浏览器中支持OAuth 2.0。

https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

据我所知,在强制门户检测过程中,没有办法强迫IOS或Android设备启动真正的浏览器。

由于无法控制此嵌入式浏览器,我必须允许我的访客使用其Google凭据使用哪些选项?如果没有其他选择,我将不得不迁移到目前没有此限制的Facebook身份验证模块。

谢谢威廉

android wifi ios google-oauth captiveportal

6
推荐指数
1
解决办法
2792
查看次数

三星手机会忽略Captive Portal意图(android.net.conn.CAPTIVE_PORTAL)

我想设置一个活动,可以选择该活动来导航俘虏门户。

当我选择一个专属的WiFi网络时,我希望能够选择我的应用程序作为处理程序,而不是启动每台Android手机上预装的CaptivePortalLogin应用程序。

这适用于Pixel 2和OnePlus 6t,但不适用于我在此处放置的任何三星手机(S10(9.0.0),S8(8.0.0),A6(8.0.0))。在三星手机上,它立即打开CaptivePortalLogin应用程序。

CaptivePortalLogin应用程序未在三星手机上设置为默认应用程序。

我以标准方式设置了活动:

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.net.conn.CAPTIVE_PORTAL"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

有没有办法使三星手机的行为与其他所有手机的行为相同?

android intentfilter samsung-mobile captivenetwork captiveportal

6
推荐指数
1
解决办法
470
查看次数

登录后在Android Captive Portal中打开浏览器

我正在为Android制作一个专属门户网站:

  1. 用户连接到Wi-Fi
  2. 强制门户打开,提供登录信息(/ generate_204的302)
  3. 我发布信息并释放用户使用互联网(204 of/generate_204)
  4. 问题:强制门户关闭,浏览器未打开

我的目的是 - 发布信息后 - 释放用户,关闭强制网络门户并打开浏览器.

我是怎么做到的

android captiveportal

5
推荐指数
1
解决办法
1821
查看次数

如何禁用俘虏网络助手进入安卓设备?

当用户通过强制门户连接到开放 WiFi 时,Android 设备将打开一个带有强制门户/登录页面的浏览器实例。

我们想禁用它,因为我们使用应用程序进行登录。

我在 Android Marshmallow 中遇到了 CaptivePortal 类。我可以用它来禁用网络吗?

类名:android.net.CaptivePortal

方法名称:ignoreNetwork

如何使用上述类和方法在 WiFi 上禁用强制门户的自动启动?

android wifi captivenetwork android-6.0-marshmallow captiveportal

5
推荐指数
1
解决办法
1419
查看次数

HTML5 视频在 Mac OS X(桌面)CNA(强制网络助手)上不显示

我正在构建一个用于免费 wifi 访问的强制门户。当用户连接时,CNA 会在加载我的门户的屏幕中弹出。

问题: HTML5 视频未在 OS X 桌面上显示。iPhone 也可以显示,桌面则不行。我什至无法检查这个邪恶浏览器中的任何内容(它可以称为浏览器吗?我不这么认为)。

我的视频代码:

<video id="promo-video" height="100%" width="100%" preload="auto" autoplay="" muted="" webkit-playsinline="" playsinline="">
  <source src="externalUrlToVideo" type="video/mp4">
</video>
Run Code Online (Sandbox Code Playgroud)

请记住,这段完全相同的代码在 iOS 上显示视频(但不会自动播放......目前这是一个小问题)。

一些屏幕截图*可能会对某些人有所帮助。视频应在右栏中播放: CNA 无法加载视频 CNA 无法加载视频

当我右键单击视频然后单击“显示控件”时会发生什么 当我右键单击视频然后单击“显示控件”时会发生什么

另外,当我右键单击然后单击“在新窗口中打开视频”时,它只显示一个视频播放器,但没有显示任何内容。显然,播放按钮不起作用......

html macos video captiveportal

5
推荐指数
1
解决办法
648
查看次数

如何使用“http.server”实现简单的强制门户?

我想提供一个强制门户http.server页面,该页面会提示用户在开始使用运行最新版本 Raspbian 的 Raspberry Pi 上的无线网络(通过 WiFi)浏览网页之前同意某些条款。

我已经http.server(Python3 附带)启动并portal.html在 Pi 上本地运行了一个网页。这是我希望用户在连接到我的 Pi 时被重定向到的页面。假设该页面的本地 IP 是192.168.1.5:80/portal.html

我的想法是,当他们连接并接受条款和条件时,我会以某种方式允许他们连接。

我该怎么办呢?

networking simplehttpserver python-3.x captivenetwork captiveportal

5
推荐指数
1
解决办法
3167
查看次数

Android App中的强制门户

任何人都可以建议如何在Android应用程序内打开强制网络门户?

我已经通过以下链接 https://developer.android.com/reference/android/net/CaptivePortal.html 使用ACTION_CAPTIVE_PORTAL_SIGN_IN

任何人都可以有完整的指南在Android应用程序中使用强制网络门户?

android captivenetwork captiveportal

5
推荐指数
2
解决办法
2347
查看次数

如何从强制门户(cna 浏览器)重定向到默认浏览器

因此,我必须将用户从强制门户重定向到浏览器,因为强制门户不正确支持 japascript 和 cookie。怎么有人出主意?非常感谢

javascript php portal captiveportal

4
推荐指数
1
解决办法
4354
查看次数

有没有办法在 Windows 热点上实现强制门户?

我正在寻找一种方法来实现 Windows 10 移动热点的强制门户。这个想法是将连接到热点的所有设备重定向到网页。

我找到了这篇文章,其中展示了如何在 Linux 中执行此操作。

但我一直没能找到类似的 Windows 版本。像这样的帖子被证明是死胡同。

如果需要,我可以使用简单的 nginx 服务器向客户端提供 302 重定向响应,但不喜欢使用任何实现强制门户的现有软件。

更新

我已经使用解决方法成功在客户端(Linux 笔记本电脑、Android 设备等)上触发了强制门户。

每当设备连接到热点时,它都会向一些预定义的网站发送请求,以检查 wifi 连接是否可以访问互联网。如果收到 302 响应,则会生成强制门户窗口。

因此,我将以下条目添加到 Windows 计算机上的主机文件中。

127.0.0.1 clients3.google.com  #android
127.0.0.1 connectivitycheck.gstatic.com  #android
127.0.0.1 nmcheck.gnome.org  #ubuntu
Run Code Online (Sandbox Code Playgroud)

然后,这些请求将使用主机文件条目在本地解析,并发送到 nginx 服务器,该服务器为所有 http 请求提供 302 重定向。

在此输入图像描述

windows network-programming wifi-direct captiveportal hotspot

4
推荐指数
1
解决办法
6123
查看次数

是否有任何标准 URL 可以检测强制门户的存在?

我正在编写一个应用程序,其中我想检查用户是否连接到接入点,但不允许网络访问(由于存在强制门户)。

以下 URL 是 Microsoft 的测试服务器,如果一切成功,则返回 HTTP 200 ,内容为“Microsoft Connect Test” http://www.msftconnecttest.com/connecttest.txt

为了将状态返回给用户,我想再次检查另一台测试服务器,该服务器会在 HTML 响应中返回一些内容。

Google 有一个测试服务器“ http://connectivitycheck.gstatic.com/generate_204 ”,但这给出了空的 HTML 响应。

Mozilla 和 Apple 提供了几个服务器,但都在 HTML 响应中返回“SUCCESS”。

为什么我不喜欢任何在 HTML 正文中仅返回“SUCCESS”的测试服务器,因为它不允许我测试内容篡改攻击的场景。

如果您知道任何其他标准服务器来测试强制门户,请回复...

〜阿什什

network-programming captivenetwork captiveportal

3
推荐指数
1
解决办法
9907
查看次数