• Python结合Selenium破解酒店wifi收费功能
  • 发布于 2个月前
  • 109 热度
    0 评论

最近我休年假了,并决定在假期去拜访朋友。我在一家旅馆住了几天,令我惊讶的是,酒店的wifi收费。这在2018年,你能想象吗?
他们也不是那么冷酷。你看,这些慷慨的人让你用wifi20分钟。整整20分钟。这几乎是Minecraft视频的一半。
如果他们让每个设备在有限的时间内使用互联网,必须有识别每个设备的方法。路由器通过设备的MAC地址来区分设备。幸运的是,我们可以很容易地改变我们的MAC地址。

使用macchanger
有一个非常有用的命令行工具,叫做macchanger。它允许你手动更改、随机化和恢复设备的MAC地址。这里是想定期随机化我们的MAC(每20分钟),以便无限期地使用免费Wifi。
需要运行3个小命令。这是必需的,因为当网络接口连接到路由器时,macchanger无法工作。

# Bring network interface down
ifconfig wlp3s0 down

# Get random MAC address
macchanger -r wlp3s0

# Bring the interface back up
ifconfig wlp3s0 up

在上面的命令中,wlp3s0是我的网络接口的名称。你可以通过运行ip a找到你的网络接口的名称。如果你运行这些命令,可以启动浏览器,然后你会看到要求你付费或试用20分钟的页面。时间结束后,你可以再次运行命令并继续执行。
但这是体力劳动,每小时做3次太重复了。嗯。自动化重复内容的好工具是什么?

使用Selenium
首先,不使用这些命令。使用os模块,我们可以从脚本运行macchanger。

import os

interface = 'wlp3s0'

os.system(f'sudo ifconfig {interface} down')
os.system(f'sudo macchanger -r {interface}')
os.system(f'sudo ifconfig {interface} up')

运行这些命令之后,我们的计算机应该作为一个完全不同的设备自动连接到网络。让我们打开浏览器并尝试使用互联网。

d = webdriver.Chrome()
d.get('http://example.com')
d.get('https://www.wifiportal.example/cp/sponsored.php')

sponsored.php网址是我按下免费Wifi链接后要跳转的页面,因此脚本应该为我们打开登记表单。我们填写表单。
在我而言,它只需要一个电子邮件地址和姓名。如果有更多字段,你可以以类似的方式填写它们。

num   = random.randint(0, 99999)
email = f'test{num}@gmail.com'

d.find_element_by_name('email').send_keys(email)
d.find_element_by_name('name').send_keys('John Doe\n')

这会填写表格并按Enter键提交。之后,门户网站问我是否要订阅它们的电子邮件或类似的东西。当然,我们甚至没有阅读就点击Reject并关闭浏览器。

d.find_elements_by_class_name('reject')[0].click()
d.close()

之后,你应该可以联网。你可以在发现连接消失时运行脚本,或者将其放在cron作业/while循环中。

用户评论