标签: captivenetwork

强制无线弹出窗口:单击链接以打开Safari

我们在网络上遇到iOS设备问题(ipads,iphone等):连接到SSID后,iphone/ipad立即打开强制网络助手(CNA) - 它就像一个没有导航按钮等的缩小浏览器 - 显示我们的欢迎页面(准备让用户在网络中验证他的MAC以给他上网).这个CNA是iOS的功能,自动发生.

我在这个论坛上四处寻找如何让用户通过点击链接(在CNA中)打开他的Safari浏览器,从而将他从CNA发送到Safari(这是我希望他的地方).

我搜索了一些短语,例如:"如何设置一个在safari中打开的链接",但我得到的结果是关于使用phonegap做这种事情的人...
一个用户谈到使用window.open(myURL,'_ system`)但是我不知道这是否解决了我的问题.

基本上我的计划是: - 让我的欢迎页面(用户连接到我的SSID后显示的页面)检测用户设备的浏览器类型.我的欢迎页面托管在我的控制器的Walled Garden中的一个站点,因此每个设备都可以看到欢迎页面(无论他们是否具有完全的互联网访问权限). - 如果用户有iOS设备,则CNA浏览器会自动打开.我的控制器检测到设备有一个CNA浏览器,并加载一个带有消息的简单页面(如):"点击此处开始导航" - 在接下来的几秒钟内(当用户消化消息时),我的控制器给用户MAC完全互联网访问 - 当用户在CNA浏览器中点击该链接时,CNA关闭然后打开Safari,并强制Safari打开目标欢迎页面(我希望我的用户在哪里,具体取决于他所使用的天线)连接的).

我真的希望一切都有道理......

我在这个论坛中找到了关于CNA浏览器的链接: Bypasses Apple Captive Network Assistant在iOS 7中登录

但它会让用户从一开始就打开Safari(禁用CNA功能),"希望"用户打开Safari(而不是直接转到他的某个应用程序).我更喜欢用户必须"点击继续",这使Safari打开,他看到我的欢迎页面.

macos mobile-safari wifi ios captivenetwork

24
推荐指数
2
解决办法
1万
查看次数

Android设备上的强制门户网站

我使用我的Android设备作为移动Web服务器.我想将通过我的便携式Android热点连接的每个用户定向到特定的wellcome页面.

有人知道如何在我的设备中实现这种技术(我相信这被称为强制门户技术)?

webserver android wifi captivenetwork tethering

18
推荐指数
1
解决办法
2万
查看次数

从Android的强制门户浏览器(CaptivePortalLogin)启动默认浏览器

在Android设备上,我们的强制门户网站在Android的强制门户浏览器中启动.在身份验证之后,我们将用户重定向到状态页面,在那里他们可以看到他们的会话信息,剩余时间和数据等.大多数用户选择保持此页面打开.

问题是状态页面重定向发生在Captive Portal浏览器中,最终将关闭.有没有什么办法可以在Captive Portal浏览器中的"完整"浏览器中打开状态页面?

大多数相关的Android代码似乎都在CaptivePortalLoginActivity.java中.mBrowserBailOutToken变量看起来很有趣,但我看不出我们如何获得令牌.

关于如何处理这种情况的任何其他想法也将受到赞赏.

mobile android wifi captivenetwork

16
推荐指数
1
解决办法
2736
查看次数

CNCopyCurrentNetworkInfo与iOS 13

Apple更改了有关iOS 13中WiFi的一些内容。如果要使用CNCopyCurrentNetworkInfo,则您的应用程序需要具有以下任一功能

  • 具有访问位置权限的应用
  • 您的应用是当前启用的VPN应用
  • 您的应用通过NEHotspotConfiguration配置了设备当前正在使用的WiFi网络

资料来源:WWDC 19会议713

我正在使用NEHotspotConfiguration配置网络,但这样做后无法再获取当前的SSID。

以下代码在iOS 12上运行良好:

/// retrieve the current SSID from a connected Wifi network  
private func retrieveCurrentSSID() -> String? {  
    let interfaces = CNCopySupportedInterfaces() as? [String]  
    let interface = interfaces?  
        .compactMap { [weak self] in self?.retrieveInterfaceInfo(from: $0) }  
        .first  

    return interface  
}  

/// Retrieve information about a specific network interface  
private func retrieveInterfaceInfo(from interface: String) -> String? {  
    guard let interfaceInfo = CNCopyCurrentNetworkInfo(interface as CFString) as? [String: AnyObject],  
        let ssid = interfaceInfo[kCNNetworkInfoKeySSID as String] …
Run Code Online (Sandbox Code Playgroud)

ios captivenetwork swift nehotspothelper ios13

14
推荐指数
1
解决办法
8574
查看次数

iPhone:如何自动连接到已知的WiFi SSID?

我知道可以使用官方Apple SDK中的CaptiveNetwork API在iPhone上列出可用的Wifi网络.

我想知道是否有办法以编程方式自动连接到特定的SSID,只要我能在CaptiveNetwork返回的列表中找到它?

iphone ssid wifi ios captivenetwork

13
推荐指数
1
解决办法
1万
查看次数

验证后防止强制网络门户自动关闭(Android)

所以简单的想法是我们有一个RADIUS服务器设置,允许用户通过用户凭证与我们的Ruckus控制器进行身份验证.在身份验证时,应将用户重定向到允许他们管理MAC身份验证设备的页面.

在我们迄今为止测试的所有内容中,包括"较旧"的Android设备,这似乎没有问题,而且事情按照应有的方式运行.然而,对于Lollipop(5.0+)版本的Android,强制门户网站已经发生了很大变化,其中一部分变化是自动关闭加入网络时启动的强制网络门户.因为我们希望在身份验证后将它们重定向到MAC设备管理页面,以便他们可以添加他们当前登录的设备并避免再次登录,这很糟糕.

我尝试过的:

  1. 检测浏览器是否正在移动设备中启动,并在onbeforeunload中弹出一个尝试保持浏览器打开的警报.

  2. 检测到成功验证后,打开一个指向重定向URL的新浏览器窗口(基本上是自己管理重定向).

  3. 在重定向的URL上执行选项2,然后执行选项1

什么行不通:

  • 要求用户在其设备上禁用强制网络门户选项.不要试图将一般用户指向高级控件.

  • 创建一个开放的网络来访问MAC管理器,它必须落后于某些身份验证.

解决方案现在:

我们对此解决方案不满意,但现在我们只是要求用户通过网络进行身份验证,然后打开浏览器并转到用户用来手动添加设备的基本登录门户页面(非网络身份验证)连接(如打印机,游戏设备等).虽然这有效,但用户必须登录,打开浏览器,手动输入URL并再次登录才是一种痛苦.

这不是人们没有碰到的问题,看到这里,我只是找不到任何遇到问题的人的解决方案.当然有一些方法可以利用javascript或其他东西来保持浏览器在这种情况下打开.如果没有,任何人都有更好的想法来管理事物?

javascript authentication android captivenetwork

11
推荐指数
1
解决办法
1万
查看次数

CaptiveNetwork:CNSetSupportedSSIDs用法

我尝试使用CaptiveNetwork来替换用于网络用户身份验证的网页.该方法是CNSetSupportedSSIDs.

我试图在我的应用程序的AppDelegate中添加此方法,但是当我想使用具有上述方法注册的SSID的热点时,没有任何事情发生.网页不显示,但我的应用程序未打开.

这是我的代码:

CFStringRef ssids[2] = { CFSTR("Wifi 1"), CFSTR("Wifi 2") };
CFArrayRef arr_ssids = CFArrayCreate(NULL, (const void **)ssids, 2, &kCFTypeArrayCallBacks);

if( CNSetSupportedSSIDs((CFArrayRef)array))
{
    NSLog(@"Successfully registered supported network SSIDs");
}
else
{
    NSLog(@"Error: Failed to register supported network SSIDs");
}
CFRelease(arr_ssids);
Run Code Online (Sandbox Code Playgroud)

PS:我还为我的应用添加了一个URL方案.

谢谢你的回答!

iphone objective-c wifi captivenetwork

8
推荐指数
1
解决办法
3174
查看次数

如何在Captive Portal中调试浏览器?

当您尝试连接到无线网络时,强制网络门户有一个浏览器有时会打开.

有谁知道我怎么调试它?

我已经尝试过的:

  1. 我试过运行模拟器,但模拟器不会打开门户.
  2. 我已经尝试将iPhone连接到我的Mac并使用Safari进行调试 - 开发,但这仅显示iPhone运行Safari时的调试信息,而不是强制门户.

iphone debugging ios captivenetwork

8
推荐指数
1
解决办法
2652
查看次数

如何知道连接的WiFi是Walled Gardened(强制网络门户)?

我知道有办法通过检查类似的响应,找出WiFi网络是否是一个强大的门户网站"http://clients3.google.com/generate_204".

但我的问题有些不同.我们都知道,在Android上,当我们连接到WiFi网络的连接周期经历了许多在课堂上提到的状态NetworkInfo.DetailedState,像AUTHENTICATING,OBTAINING_IPADDR,VERIFYING_POOR_LINK等等.另外,美国的一个是CAPTIVE_PORTAL_CHECK和android系统检查是否网络,被连接是否被俘.对于这个Android,使用CaptivePortalTracker#isCaptivePortal(InetAddress服务器),结果是boolean.因此,我们确信Android知道连接是否受限制(俘虏)

所以,我的问题是Android系统是否提供了一些回调或某种状态,通过这种状态,我们可以了解网络是强制网络门户而无需手动检查?由于Android系统已经检查了网络的强制门户,我们是否需要再次做同样的事情?

PS我只针对API 19(KitKat 4.4.2).

networking android captivenetwork

8
推荐指数
1
解决办法
1467
查看次数

iOS:在Safari中打开欢迎页面,而不是CNA(后验证)

我正在运行一个强制网络门户,目标受众只是移动设备.我想在CNA中进行身份验证向用户打开"欢迎页面" .此页面应在(移动)Safari中打开,而不是在CNA中打开,因为它包含在有限的CNA环境中不起作用的交互式元素.

我以前见过这个在其他门户网站工作,但我不知道他们是怎么做的,也不知道经过长时间的研究后甚至是多少.

有的是:

  • 强制门户网站/专属网络正在运行
  • 用户连接获取弹出窗口(CNA)中显示的启动页面
  • 由于我不需要身份验证,此时它们已连接,右上角的按钮显示"OK"

想要的是:

  • 此启动页面上的链接或按钮可打开Safari窗口

要么

  • 一些JavaScript,重定向,以及在CNA关闭时打开Safari窗口的任何其他内容.

到目前为止我找不到任何东西(例如使用target ="_ system").有谁知道这些酒店和其他门户网站如何设法做到这一点,做到了吗?

mobile-safari ios captivenetwork

7
推荐指数
2
解决办法
8838
查看次数