我正在寻找一种让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) 我正在尝试在我现有的公共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
我们正在开发WiFi认证解决方案,该解决方案应该在连接到WiFi之后将用户重定向到特定页面.
在我们面临问题的Android设备上.一旦用户点击窗口小部件中的通知,captive就会立即打开和关闭,默认浏览器不会打开.有人可以建议最好的方法吗?或者甚至不可能直接从俘虏打开默认浏览器?
我们正在使用Mikrotik硬件
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身份验证模块。
谢谢威廉
我想设置一个活动,可以选择该活动来导航俘虏门户。
当我选择一个专属的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
我正在为Android制作一个专属门户网站:
我的目的是 - 发布信息后 - 释放用户,关闭强制网络门户并打开浏览器.
我是怎么做到的
当用户通过强制门户连接到开放 WiFi 时,Android 设备将打开一个带有强制门户/登录页面的浏览器实例。
我们想禁用它,因为我们使用应用程序进行登录。
我在 Android Marshmallow 中遇到了 CaptivePortal 类。我可以用它来禁用网络吗?
类名:android.net.CaptivePortal
方法名称:ignoreNetwork
如何使用上述类和方法在 WiFi 上禁用强制门户的自动启动?
android wifi captivenetwork android-6.0-marshmallow captiveportal
我正在构建一个用于免费 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 无法加载视频
另外,当我右键单击然后单击“在新窗口中打开视频”时,它只显示一个视频播放器,但没有显示任何内容。显然,播放按钮不起作用......
我想提供一个强制门户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
任何人都可以建议如何在Android应用程序内打开强制网络门户?
我已经通过以下链接 https://developer.android.com/reference/android/net/CaptivePortal.html 使用ACTION_CAPTIVE_PORTAL_SIGN_IN
任何人都可以有完整的指南在Android应用程序中使用强制网络门户?
因此,我必须将用户从强制门户重定向到浏览器,因为强制门户不正确支持 japascript 和 cookie。怎么有人出主意?非常感谢
我正在寻找一种方法来实现 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
我正在编写一个应用程序,其中我想检查用户是否连接到接入点,但不允许网络访问(由于存在强制门户)。
以下 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”的测试服务器,因为它不允许我测试内容篡改攻击的场景。
如果您知道任何其他标准服务器来测试强制门户,请回复...
〜阿什什
captiveportal ×13
android ×7
wifi ×3
ios ×2
networking ×2
android-wifi ×1
dns ×1
express ×1
google-oauth ×1
hotspot ×1
html ×1
intentfilter ×1
javascript ×1
macos ×1
mikrotik ×1
node.js ×1
php ×1
portal ×1
python-3.x ×1
redirect ×1
video ×1
wifi-direct ×1
windows ×1