准确检测python中的捕获门户

准确检测python中的捕获门户,python,python-2.7,networking,Python,Python 2.7,Networking,我需要可靠地检测设备是否具有完全的internet访问权限,即用户不局限于一个固定门户(也称为围墙花园),即一个有限的子网,该子网强制用户在表单上提交凭据以获得完全访问权限 我的应用程序正在自动执行身份验证过程,因此在开始登录活动之前,必须知道无法完全访问internet 问题不在于如何检查网络接口是否已启动并处于连接状态。这是关于确保设备具有不受限制的internet访问,而不是沙盒式的intranet段 以下是我目前要测试的代码: def get_connection_status(remo

我需要可靠地检测设备是否具有完全的internet访问权限,即用户不局限于一个固定门户(也称为围墙花园),即一个有限的子网,该子网强制用户在表单上提交凭据以获得完全访问权限

我的应用程序正在自动执行身份验证过程,因此在开始登录活动之前,必须知道无法完全访问internet

问题不在于如何检查网络接口是否已启动并处于连接状态。这是关于确保设备具有不受限制的internet访问,而不是沙盒式的intranet段

以下是我目前要测试的代码:

def get_connection_status(remote_server = "www.google.com"):
    for timeout in [1, 5, 10, 15]:
        try:
            print "Checking internet connection.."
            socket.setdefaulttimeout(timeout)

            # see if we can resolve the host name -- tells us if there is
            # a DNS listening
            host = socket.gethostbyname(remote_server)

            # connect to the host -- tells us if the host is actually
            # reachable
            s = socket.create_connection((host, 80), 2)
            s.close()

            print 'Internet connected.'
            return "Connected"
        except Exception, e:
            print e
            print "Internet not connected."
    return "Not Connected"

如果用户在捕获门户内,这会准确返回“未连接”吗?如果没有,有什么方法可以改进此方法,使其能够准确地检测到它?

下面的答案并不特定于Python或任何其他语言

如果一个在
有围墙的花园中
,以下因素在大多数圈养门户中是标准的

  • 您无法访问Internet(隐式,但添加到此处是为了不熟悉Internet)

  • 不允许访问安全网站(HTTPS)。唯一的例外是捕获门户本身,可能还有捕获门户管理员允许的一些服务器

  • 因此,可以通过执行以下测试来检查他/她是否在有围墙的花园中

  • 检查DNS解析是否正常工作。我建议您使用您控制的域,并将TTL保持一两分钟,以确保查询服务器始终返回到您的DNS。如果DNS测试通过,尽管您仍在围墙花园中,但使用Internet连接的可能性非常高

  • 如果DNS解析有效,请尝试访问安全站点(HTTP-SSL),最好是通过IP和您自己的服务器访问。如果不起作用,请继续下一步。您应该考虑设置一个低超时时间,以确保您可以快速移动到下一个步骤。

  • 尝试使用HTTP协议访问您自己的服务器之一。如果一个人在
    有围墙的花园中
    ,他将被重定向到捕获门户页面。如果您将收到的页眉与服务器上配置的页眉进行比较,您将知道您是否落后于
    walled\u garden


  • 你需要更具体地说明你的期望。你是否在试图检测你的主人是否坐在一家快餐店,让你在上网之前先看一些广告?或者你想确定你的主机是否在中国这样一个互联网被巨大防火墙隔离的国家?很抱歉不清楚。例如,去酒店并连接到他们的Wi-Fi,但在使用完整的互联网之前需要使用凭据登录。那种事。我想更接近你的快餐例子。这有意义吗?这个解决方案对我很有效。使用“请求”库使它变得非常简单。非常感谢你。