登陆使用Microsoft ForeFront“线程管理网关”的网站

1 投票
1 回答
1792 浏览
提问于 2025-04-17 16:44

我想用Python登录一个使用了Microsoft Forefront的网站,并获取一个内部网页的内容进行处理。

我对Python并不陌生,但我还没有使用过任何URL库。我查看了以下几个帖子:

我也尝试了一些模块,比如requests。但我还是不太明白该怎么做。仅仅输入用户名和密码就够了吗?还是说我需要用cookies来进行身份验证?如果有示例代码就太好了。

这是我目前写的代码:

import requests

NAME = 'XXX'
PASSWORD = 'XXX'

URL = 'https://intra.xxx.se/CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=3'

def main():
    # Start a session so we can have persistant cookies
    session = requests.session()

    # This is the form data that the page sends when logging in
    login_data = {
        'username': NAME,
        'password': PASSWORD,
        'SubmitCreds': 'login',
    }

    # Authenticate
    r = session.post(URL, data=login_data)

    # Try accessing a page that requires you to be logged in
    r = session.get('https://intra.xxx.se/?t=1-2')
    print r

main()

但是上面的代码在session.post这一行出现了异常:

raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='intra.xxx.se', port=443): Max retries exceeded with url: /CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=3 (Caused by <class 'socket.error'>: [Errno 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond)

更新: 我发现我提供的用户名和密码是错误的。一旦更新后,我用上面的代码得到了HTTP-200的响应,但当我尝试访问任何内部网站时,我却得到了HTTP 401的响应。这是为什么呢?上面的代码有什么问题吗?我是否应该以某种方式使用cookies?

1 个回答

0

TMG在阻止连接时非常挑剔。接下来,我们需要弄清楚为什么TMG会阻止你的连接尝试。

如果你能访问TMG服务器,先登录进去,然后打开TMG的管理界面(我记不清它具体叫什么了),查看一下来自你IP地址的失败请求日志。希望这些日志能告诉你为什么连接被拒绝。

看起来你是想通过内网连接到它。有一种情况是TMG会阻止连接,就是当它收到来自它认为是“内部”网络的地址的请求时。(TMG有两个网络接口,目的是在两个网络之间使用:一个是内部网络,它保护这个网络的资源不受威胁,另一个是外部网络,威胁可能来自这里。)如果它在外部网络接口上收到一个看起来来自内部网络的请求,它会认为这个IP地址是伪造的,从而阻止连接。不过,我不能确定这就是问题所在,因为我不知道这个TMG服务器的内部网络是怎么设置的,也不清楚你的机器的IP地址是否在这个内部网络上。

撰写回答