ios7和捕获门户对apple请求URL的更改

ios7和捕获门户对apple请求URL的更改,ios,ios7,wifi,Ios,Ios7,Wifi,在ios7中,设备发送请求以检查连接到wifi后是否有互联网连接的URL发生了变化(情况更糟!) 在ios6和更早版本中,请求是: GET /library/test/success.html HTTP/1.0 Host: www.apple.com User-Agent: CaptiveNetworkSupport/1.0 wispr Connection: close () 但现在在ios7中,它可以访问“多达200”(根据) 在我自己测试过之后,我可以确认这些请求,随机访问appleip

在ios7中,设备发送请求以检查连接到wifi后是否有互联网连接的URL发生了变化(情况更糟!)

在ios6和更早版本中,请求是:

GET /library/test/success.html HTTP/1.0
Host: www.apple.com
User-Agent: CaptiveNetworkSupport/1.0 wispr
Connection: close
()

但现在在ios7中,它可以访问“多达200”(根据)

在我自己测试过之后,我可以确认这些请求,随机访问appleiphonecell.com、capture.apple.com、airport.us、ibook.info等

所以我的问题是:有没有人有这些URL的完整列表(可能只是苹果自己的每个域)?我们在wifi上运行一个专属门户,但只是为了让用户知道他们需要在连接到wifi后连接到VPN。单击“捕获门户登录”页面上的“取消”有时会显示“不使用互联网”选项,这将允许用户连接到VPN,但有时,单击“取消”不会给出此选项,只是立即断开wifi连接,这意味着用户无法连接到VPN

在我们可以伪造对特定URL(library/test/success.html)的响应之前,它将保持wifi连接。如果我们有一个它可以访问的站点列表,我们可以再次这样做,否则我们可能不得不回到绘图板上,使用我们的捕获门户!(或者等待ios7更新,该更新修复了“无需互联网即可使用”选项,该选项并非每次都出现)。如果可能的话,我想我们现在会研究基于用户代理的方法


编辑wee更新,看起来UA至少与“CaptiveNet工作支持”保持一致,因此我们将暂时改为UA检查。

在我们的测试中,CNA似乎还触发了不仅具有“CaptiveNet工作支持”而且具有通用WebKit用户代理标识符的请求。您是否确实成功地仅检查了CaptiveNet工作支持的用户代理标头


这真是一团糟。

以Lighttpd服务器配置的形式发布了一个解决方案:


该解决方案基于UA对CaptiveNet工作支持的检查—尽管iOS也将尝试使用WebKit UA从苹果网站加载相同的长随机URL。

检查Userv代理“CaptiveNet工作支持”。我在我的nginx Web服务器上测试了这一点,并且在所有iOS设备上都能完美运行

if ($http_user_agent ~* (CaptiveNetworkSupport)) {
            return 200;
        }

有趣的是,
www.appleiphonecell.com
captive.apple.com
目前都解析为Akamai地址

~/ > host captive.apple.com
captive.apple.com is an alias for captive.apple.com.edgekey.net.
captive.apple.com.edgekey.net is an alias for e7279.e9.akamaiedge.net.
e7279.e9.akamaiedge.net has address 23.212.87.91
但是,
airport.us
和朋友们决定直接去苹果公司

从这些IP地址中,您可以找到更多具有相同PTR记录的主机名。添加路径
/library/test/success.html
通常会导致直接响应或重定向到
www.apple.com
主机名上的同一页面

~/ > host 17.149.160.87
87.160.149.17.in-addr.arpa domain name pointer airport.us.
87.160.149.17.in-addr.arpa domain name pointer ibook.info.
87.160.149.17.in-addr.arpa domain name pointer macbookair.net.
87.160.149.17.in-addr.arpa domain name pointer macintosh.me.
87.160.149.17.in-addr.arpa domain name pointer applecare.info.
87.160.149.17.in-addr.arpa domain name pointer macintosh.info.
87.160.149.17.in-addr.arpa domain name pointer itunes.info.
87.160.149.17.in-addr.arpa domain name pointer itunes.us.
87.160.149.17.in-addr.arpa domain name pointer iphoto.us.
87.160.149.17.in-addr.arpa domain name pointer applecare.us.
87.160.149.17.in-addr.arpa domain name pointer macbook.us.
87.160.149.17.in-addr.arpa domain name pointer itunesmobile.com.
87.160.149.17.in-addr.arpa domain name pointer ipod.us.
87.160.149.17.in-addr.arpa domain name pointer itunestelevision.com.
87.160.149.17.in-addr.arpa domain name pointer macosxversions.com.
87.160.149.17.in-addr.arpa domain name pointer itunes.me.
87.160.149.17.in-addr.arpa domain name pointer itunesaircheck.com.
87.160.149.17.in-addr.arpa domain name pointer mac.us.
87.160.149.17.in-addr.arpa domain name pointer macbookair.us.
87.160.149.17.in-addr.arpa domain name pointer ipod.me.
87.160.149.17.in-addr.arpa domain name pointer applestore.info.
87.160.149.17.in-addr.arpa domain name pointer iphone.me.
87.160.149.17.in-addr.arpa domain name pointer osxlionlaunchpad.com.
87.160.149.17.in-addr.arpa domain name pointer macgestures.com.
87.160.149.17.in-addr.arpa domain name pointer macbookair.org.
87.160.149.17.in-addr.arpa domain name pointer mac.info.
87.160.149.17.in-addr.arpa domain name pointer macos.us.
87.160.149.17.in-addr.arpa domain name pointer myipod.net.
87.160.149.17.in-addr.arpa domain name pointer itunesu.net.
87.160.149.17.in-addr.arpa domain name pointer appleiphonecell.com.
87.160.149.17.in-addr.arpa domain name pointer firewire.us.
87.160.149.17.in-addr.arpa domain name pointer airport.info.
87.160.149.17.in-addr.arpa domain name pointer itunesparty.com.
87.160.149.17.in-addr.arpa domain name pointer applecomputer.info.
87.160.149.17.in-addr.arpa domain name pointer appletv.info.
87.160.149.17.in-addr.arpa domain name pointer applecomputers.us.
87.160.149.17.in-addr.arpa domain name pointer idvd.us.
87.160.149.17.in-addr.arpa domain name pointer osx.info.
87.160.149.17.in-addr.arpa domain name pointer macbookair.info.
87.160.149.17.in-addr.arpa domain name pointer itunesu.org.
87.160.149.17.in-addr.arpa domain name pointer itunesuniversity.com.
87.160.149.17.in-addr.arpa domain name pointer imovie.us.
87.160.149.17.in-addr.arpa domain name pointer theapplestore.org.
87.160.149.17.in-addr.arpa domain name pointer macbookpro.org.
87.160.149.17.in-addr.arpa domain name pointer apple.me.
87.160.149.17.in-addr.arpa domain name pointer itools.info.
87.160.149.17.in-addr.arpa domain name pointer thinkdifferent.us.
87.160.149.17.in-addr.arpa domain name pointer thinkdifferent.info.
87.160.149.17.in-addr.arpa domain name pointer macintosh.us.
87.160.149.17.in-addr.arpa domain name pointer ipod.info.
87.160.149.17.in-addr.arpa domain name pointer applescript.us.
87.160.149.17.in-addr.arpa domain name pointer quicktime.info.
87.160.149.17.in-addr.arpa domain name pointer macosxlionairdrop.com.
87.160.149.17.in-addr.arpa domain name pointer itunesshow.com.
87.160.149.17.in-addr.arpa domain name pointer airtunes.net.
87.160.149.17.in-addr.arpa domain name pointer ipod.net.
87.160.149.17.in-addr.arpa domain name pointer macos.info.
87.160.149.17.in-addr.arpa domain name pointer imac.info.
87.160.149.17.in-addr.arpa domain name pointer imac.us.
87.160.149.17.in-addr.arpa domain name pointer appleiosv.com.
87.160.149.17.in-addr.arpa domain name pointer ipodnano.me.
将这些添加到
/etc/lighttpd/lighttpd.conf

$HTTP["host"] =~ "^(appleiphonecell.com|captive.apple.com|www.itools.info|www.ibook.info|www.aiport.us|www.thinkdifferent.us|www.apple.com)" {
    server.document-root    = "/www/library/test/"
    index-file.names        = ( "success.html" )                                
    dir-listing.activate    = "disable"                                         
    server.error-handler-404 = "/success.html"
    #accesslog.filename = "/var/log/lighttpd/apple-access.log" 
    #server.errorlog = "/var/log/lighttpd/apple-error.log"
    url.rewrite = (
        "^/(.*/)" => "/success.html",
    )
}

在iOS6和iOS7上进行了测试

到目前为止,只需通过请求对“CaptiveNet工作支持”进行UA检查就可以了。至少到目前为止没有抱怨。我有一些日志条目可以分享,如果有用的话,文本不会放在评论框中。我只能用一台设备(iOS 7 iPad)进行检查,但是它有一个通用的webkit用户代理,所以我不认为关闭CaptiveNet工作支持会起作用。不幸的是,您是如何使用nginx检查UA的?用户代理可以通过$http\u user\u代理变量进行检查。此变量由nginx在每次传入请求时设置。我已经为苹果编辑了我的答案iOS@dev0
返回200
是否进入nginx本地服务器页面?它不应该是
返回302吗http://signin.localnet/signin.html
?更好的方法是使用catchall地址,而不是尝试捕捉Apple CNA的特定URL
$HTTP["host"] =~ "^(appleiphonecell.com|captive.apple.com|www.itools.info|www.ibook.info|www.aiport.us|www.thinkdifferent.us|www.apple.com)" {
    server.document-root    = "/www/library/test/"
    index-file.names        = ( "success.html" )                                
    dir-listing.activate    = "disable"                                         
    server.error-handler-404 = "/success.html"
    #accesslog.filename = "/var/log/lighttpd/apple-access.log" 
    #server.errorlog = "/var/log/lighttpd/apple-error.log"
    url.rewrite = (
        "^/(.*/)" => "/success.html",
    )
}