📜  Linux 中强制门户的自动登录

📅  最后修改于: 2022-05-13 01:56:34.211000             🧑  作者: Mango

Linux 中强制门户的自动登录

每次您连接到专用网络时,可能是您的学院、办公室、学校等。强制门户屏幕会出现,您必须在其中输入组织提供的凭据。这个想法是自动化该过程,以便每当我们连接到同一网络中的任何路由器时,它都会自动登录。

注意:在下面的文章中,提供的步骤可能不适用于每个网络,但想法是了解过程,并且可以尝试,因为大多数强制门户都是松散构建的,因此值得一试。

系统要求:任何基于 Unix 的系统,最好是 ubuntu Linux。

需要安装的包: wget、w3m。 (可以使用 apt-get 安装)

第 1 步:研究强制门户页面。这是重要步骤之一,必须认真执行。右键单击提供的文本区域并选择检查(考虑到正在使用的浏览器是 Chrome/Firefox)。请注意输入文本区域中的“名称”字段。它必须类似于“用户名”或“密码”(如图所示)。

强制门户页面的研究

HTML 将嵌入 JavaScript(显然!)。注意被它调用的函数。

第 2 步:研究 JavaScript 代码。我们之前看到的函数一定是在浏览器使用的javascript代码中。可以以与访问 HTML 相同的方式访问它。转到检查,这一次,单击源,您将看到该网站的 JS 代码。

注意:通常这些代码将在一条直线上,因此难以解释。因此,任何在线美化器都可以用来格式化代码以使其更具可读性。

第三步:找到链接!众所周知,每个 HTTP POST 请求都用于向服务器发送数据。因此,现在在 javascript 代码中,必须有一个链接或说查询正在组成并发送 POST 请求。所以我们必须找到查询。这里重要的部分不是查找查询,而是查找与链接一起使用的签名。

签名在这里表示所需的变量数量,它们的顺序等。有时某些变量需要时间戳,因此可以为其提供一个虚拟值(如果需要,也可以使用实际时间戳)。请注意,在给定的图像中,“mode”变量的值是 191,表示登录状态,值 193 表示注销状态。这可以通过仔细阅读代码得出。

为登录找到的查询:

为注销找到的查询:

第 4 步:使用变量创建自己的查询字符串。一旦观察到查询,就很容易使用相同的变量进行自己的查询并相应地填写适当的数据。在这种情况下创建的链接如下:

'mode=191&username=admin&password=root&a=1551345153461'

这里需要注意的重要一点是,人们可能会认为这个字符串可以附加到强制门户的 IP 上,然后在浏览器中使用。例如,

但重要的是要注意,这并非在所有情况下都有效,这只适用于使用PHP等后端技术且可以使用链接进行变量解析的情况。

第 5 步:使用终端发送 POST 请求。一旦 POST 请求可以由 Linux 中的终端发送,就可以将其插入 bash 脚本以实现自动化。为了在此处发送 POST 请求,使用了用于 Linux 的非图形浏览器。有许多非图形浏览器,如 lynx、w3m 等。在这种情况下,使用了 w3m 浏览器。它可以从 Linux 的手册页中轻松学习。 w3m 对 POST 的使用在其手册页中有很好的解释(如图所示)。

w3m-post

在这种情况下,Ajax 用于与后端通信,并且请求-响应是 XML,因此 POST 请求将被发送到 XML 链接而不是普通的 HTML 页面。这可能因网络而异。请求被发送到的页面可以在与变量相同的 JavaScript 代码中被识别。最后,命令看起来像这样:

第 6 步:将其插入到 bash 脚本中。要使该过程自动化,有必要制作一个 bash 脚本文件,该文件将在您每次连接到组织的网络时运行。要制作一个简单的 bash 脚本,请转到终端并键入

nano autologin

Nano 是一个命令行编辑器,它现在将创建一个名为 autologin 的文件。现在通过按ctrl+shift+V将以下脚本粘贴到编辑器中。

注意:要创建 bash 文件,不要在文件名中输入扩展名,因为 Linux 从不处理扩展名,而是在内部识别文件。 Linux 自己知道文件是 ASCII 文本文件、doc 文件还是 bash 文件。

#!/bin/bash

wget -q --tries=10 --timeout=10  http://192.168.1.8:8294
if [[ $? -eq 0 ]]; then
    w3m -post - http://192.168.1.8:8294/login.xml <<<'mode=191&username=admin&password=root&a=1551345153461'
        echo "Online!"
else
        echo "Unreachable!"
fi

解释:

  • 代码的第一行表明该文件是一个 bash 脚本,它只能使用 bash 执行,它的位置是/bin/bash
  • wget是一个 Linux 命令,它基本上是一个用于从 Internet 获取内容的程序。
  • 在这里,在这种情况下,wget 用于检查 PC 与网络的连接,检查 IP 是否处于活动状态。如果该 IP 未处于活动状态,则意味着该设备未连接到组织的专用网络,并且脚本将不会进一步执行。
  • wget 的标志是在中止之前尝试执行的次数,类似于超时。 -q 用于关闭详细信息。
  • 美元?是一个环境变量,用于在 Linux 环境中存储返回值。如果 wget 返回 false,$?变成 0 并且控制将转到 else 并且什么都不会发生。
  • 但是当IP处于活动状态时,即wget会返回正返回值时,会体现在$?将执行命令 w3m 并成功登录。

第 7 步:使脚本可执行,每次连接到网络时。这是最后一部分,脚本每次连接到任何网络时都可以执行。它将在内部查找该网络是否为组织的专用网络,并相应地登录。对于此步骤,请转到您的/etc/network文件夹。

在此文件夹中,有 4 个文件夹(截至 ubuntu-19.10 的最新版本)名为: if-down.dif-post-down.dif-pre-up.dif-up.d 。刚刚编写的脚本必须粘贴在“ if-up.d ”文件夹中。每次连接到新网络时,Linux 都会在内部调用此文件夹中存在的所有脚本。

注意:如果您没有找到默认的 4 个文件夹,请创建我们需要的一个并将条目添加到/etc/network/interfaces文件中。要粘贴脚本,请转到脚本所在的目录,然后键入:

sudo cp autologin /etc/network/if-up.d

第 8 步:使文件可执行并重新启动网络。文件的所有权必须更改为 root。因此键入命令:

sudo chown root:root autologin

然后授予使文件可执行的权限:

sudo chmod +x autologin

最后,重新启动网络管理器以进行新设置!

/etc/init.d/network-manager restart

这应该使您的 PC 能够在每次连接到网络时自动登录到专用网络!虽然现在您已登录,但每次您连接到网络时,登录网络时可能总会出现强制门户的弹出窗口。要摆脱它,请转到设置->隐私并关闭连接检查。