准确检测python中的强制门户

时间:2017-02-23 00:14:21

标签: python python-2.7 networking

我需要可靠地检测设备是否具有完全的互联网访问权限,即用户不仅限于强制网络门户(也称为围墙花园),即强制用户在表单上按顺序提交凭据的有限子网获得完全访问权限。

我的应用程序正在自动执行身份验证过程,因此在开始登录活动之前了解完全的互联网访问权限非常重要。

问题不在于如何检查网络接口是否已启动且处于连接状态。它是关于确保设备具有不受限制的互联网访问,而不是沙盒内部网段。

这是我目前要测试的代码:

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"

这是否准确地返回"未连接"如果用户在强制门户网站内?如果没有,有什么方法可以改进这种方法,以便它能准确地检测到它?

1 个答案:

答案 0 :(得分:0)

以下答案并非特定于Python或任何其他语言。

如果一个人在walled_garden,则以下因素是大多数专属门户网站的标准。

  1. 您无法访问互联网(隐式,但为了初学者而在此处添加)

  2. 不允许访问安全网站(HTTPS)。唯一的例外是强制门户网站本身以及强制门户管理员允许的某些服务器。

  3. 因此,可以通过执行以下测试来检查他/她是否在walled_garden

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

    2. 如果DNS解析有效,请尝试通过IP和您自己的服务器之一访问安全站点(HTTP-SSL)。如果不起作用,请继续执行下一步。您应该考虑设置一个低超时,以确保您可以快速进入下一步。

    3. 尝试使用HTTP协议访问您自己的服务器之一。如果一个人在walled_garden,他将被重定向到强制门户页面。如果您将收到的页面标题与您在服务器上配置的页眉进行比较,则会知道您是否落后walled_garden