酒店热点狂欢

有没有在酒店住过,因为总是要开门而感到恼火用于无线访问的浏览器?是的,我也是。最近的一个例子特别令人沮丧,我不得不拿出我最喜欢的瑞士陆军链锯为了使我的生活轻松了一点。

形势

所以,背景故事是我住在山上的一家酒店几天。就像这些天的幸运情况一样1,这家酒店有无线接入。但奇怪的是,每个房间有单独的用户名和密码。“够公平的了”,我想,马上打开我的笔记本电脑,然后打开Firefox,输入我的登录数据以获取等待已久的连接。使用Firefox(或其他浏览器matter)是必需的,因为登录页面是通过俘虏门户.你就是这样当您在您的浏览器:

Firefox专属门户登录横幅

很好,我想,然后愉快地继续我的一天。

这个问题

第二天问题开始了。起床醒来后笔记本电脑,我无法阅读电子邮件2,或在上阅读聊天内部控制室,通过查看我的消息信号,或使用互联网全部的4.

也,发出砰的声响向我打招呼禁止目的地网络:

$ping网站www.heise.dePING www.heise.de(193.99.144.85)56(84)字节的数据。从登录.hotspot.lan(192.168.168.1)icmp_seq=1禁止目的地网络从logout.hotspot.lan(192.168.168.1)icmp_seq=2目标网络禁止从logout.hotspot.lan(192.168.168.1)icmp_seq=3目标网络禁止^C类---www.heise.de ping统计---发送3个数据包,0个接收,+3个错误,100%数据包丢失,时间200ms

显然,我没有上网。

这时,我注意到Firefox专属门户登录横幅(参见图片(见上文)。哦,我必须再次登录,这很奇怪。单击时“打开网络登录页”按钮,我自动登录。需要再次输入登录详细信息。我觉得这也很奇怪,因为如果登录是自动的,为什么我必须访问登录页面又一次?

我把笔记本电脑放在床上睡觉,在村子里散散步,买些杂货店,享受山上的空气5我回来时要登录再一次以获得无线访问。我慢慢地开始得到有点恼火.我的猜测是相关最终用户设备的MAC地址从访问列表相当快,可能大约一个小时或6,因此网络连接被切断及时。

让我的情况更糟的一个问题是,我经常几个浏览器窗口同时打开;通常是因为我有几趟火车即时思考,每个窗口都包含相关信息每一种思路。问题是,只是浏览器窗口的实际上显示了(自动显示的)捕获门户登录横幅。找到带横幅的窗口相当耗时。

好吧,这开始变得愚蠢和有点恼人了。是时候自动化了消除烦恼。WWW::机械化去营救!

WWW:机械化成为漫画超级英雄;由DALL-E生成
WWW::机械化作为漫画超级英雄;由DALL-E生成。

解决方案

为什么选择WWW::机械化? 嗯,我有这方面的经验(我以前使用类似的过程自动登录到内燃机火车在德国当我以前经常上下班这个大流行),我知道我可以用它来将数据提交到简单的HTML形式,波尔我的go-to语言适合这种情况吗自动化。

那么,如何开始自动化登录过程呢?简单的解决方案:退出Firefox,关闭所有浏览器窗口,将用电脑睡觉,然后散散步几个小时。

回来后,我只需要使用perl-de0启动REPL(更换)-像游戏环境和珀尔多克阅读广泛的WWW::机械化文档.

第一次尝试触发与捕获门户的连接进展不顺利:

└> perl-de0从perl5db.pl版本1.55加载DB例程编辑器支持可用。输入h或“h h”可获得帮助,输入“man perldebug”可获得更多帮助。主::(-e:1):0DB<1>使用WWW::Mechanize;DB<2>$mech=WWW::机械化->新增;数据库<3>$mech->get('https://google.com网站');获取时出错https://google.com:无法连接到google.com:443(SSL连接尝试失败)(eval22)[/home/cochrane/perl5/perlbrew/perls/perl-5.30.1/lib/5.30.1/perl5db.pl:738]第2行。

好的,所以我们需要使用HTTP并避免使用HTTPS。很高兴知道。

仅使用HTTP效果更好:

DB<4>x$mech->获取('http://google.com')0 HTTP::响应=HASH(0x55a95f5048c0)<剪>很多细节;你真的不想看到这个</snicp>

这就是我们喜欢看到的!我们现在至少要把东西拿回来。看一下页面的标题,我们得到:

数据库<5>x$mech->title();0'我的建议热点>登录'

是的,这是一个登录页面。使用转储页面内容

DB<5>x$mech->content();<剪>大量HTML内容</snicp>

我们得看看要玩什么。需要注意的主要事项内容(我没有展示,因为它太详细了,我想保护无辜者)包括:

  • 我们有一个叫的表格登录

    <形式 名称=“登录” 行动="http://login.hotspot.lan/login" 方法=“发布”>
  • 我们有一个用户名字段用户名

    <输入 风格=“宽度:80px” 名称=“用户名” 类型=“文本” 价值=""/>
  • 我们有一个带有名称的密码字段密码

    <输入 风格=“宽度:80px” 名称=“密码” 类型=“密码”/>

这为我们提供了足够的信息,以便能够使用相关登录数据。

旁白:有趣的是,尽管网站上的字段是英文的是德国的。我想标准化英语字段可能很有用编程时。

为了提交表格,我们使用WWW::机械化提交表单()方法(我在这里对其进行了很好的格式化以使事情更容易进行的调用阅读):

$机械->提交表单(表单名称=> '登录',领域=>{用户名=> '房间用户名',密码=> '房间密码',});

我们可以通过询问HTTP::响应如果一切顺利好:

数据库<7>x$mech->res->is_success;0  1

目前为止看起来不错。让我们看看发出砰的声响按预期工作

$ping网站www.heise.dePING www.heise.de(193.99.144.85)56(84)字节的数据。来自www.heise.de的64字节(193.99.144.85):icmp_seq=1 ttl=247时间=20.6 ms来自www.heise.de的64字节(193.99.144.85):icmp_seq=2 ttl=247时间=13.9 ms^C---www.heise.de ping统计---发送2个数据包,接收2个,0%数据包丢失,时间1000msrtt最小值/avg/max/mdev=13.941/17.281/20.621/3.340 ms

对!换句话说:我们在!那是容易的.

把所有东西放在一起(并稍微清理一下代码),我最终有了这个:

使用严格;使用警告;使用WWW::机械化;我的$机械=WWW::机械化->新的;$机械->得到('http://google.com');#检查我们是否有登录页面,而不是谷歌或其他东西
#即我们没有登录
如果($机械->标题()=~ '登录') {$机械->提交表单(表单名称=> '登录',领域=>{用户名=> “<房间用户名>”,密码=> “<房间密码>”});如果($机械->物件->成功(_S){打印 “登录成功\n”;}其他的{打印 “登录失败\n”;}}其他的{打印 “已登录\n”;}

现在我可以在每次唤醒笔记本电脑时运行脚本重新上线。耶!

从安全角度来看,用户名和密码有点奇怪显然与房间号有关。换句话说,我可能同样容易使用隔壁房间的帐户(我想:我不能麻烦你最后检查一下)。

结论

好吧,当我醒来时,这个脚本确实为我节省了一些时间和麻烦笔记本电脑处于挂起状态。此外,计算出为了找到解决方案,这个谜题是必要的。Perl保存白天7再一次!

最初发布于https://peateaca.de.


  1. 记得找到一家有任何无线连接是一项完整的任务?有点像那些在机场找到电源插座为笔记本电脑充电的日子,当时真的很难,一个人最终坐在公用设施室旁边的地板上,清洁人员通常会在那里插上吸尘器。啊,那些日子😉. 换言之:人类已经走过了漫长的道路。[返回]
  2. 我使用杂种狗; 它速度快,只需使用文本发送电子邮件。对吗?对吗?[返回]
  3. 我还使用爱尔兰国税局用于IRC。你看,我在这里已经有一段时间了,好吗?[返回]
  4. 我是那些住在终端上的极客之一,因此我倾向于使用许多基于终端的工具来完成任务。[返回]
  5. 我的意思并不是讽刺:因为森林和远离任何类型的大都市,空气清新多了。有没有注意到欧洲城市的空气很糟糕?[返回]
  6. 后来,我试着让电脑进入睡眠状态,几分钟后再把它唤醒。连接仍然有效,所以我最好的猜测是,保持连接有效并注册MAC地址的超时时间大约为几个小时,但不超过两三个小时,因为即使如此短的不活动时间也需要再次登录。后来的测试表明,超时是在一个小时之后。[返回]
  7. 嗯,这真的节省了一周时间。[返回]

标签

保罗·科克伦

多用途软件开发人员和极客

浏览他们的文章

反馈

这篇文章有什么问题吗?通过在上打开问题或拉取请求来帮助我们github