Mac 上面的远程控制 Teamviewer

0x00 前言

前段时间一直在抓取一个站点,这个站点非常难爬取,原因如下:

  • 第一点,网站 Ajax 超级多。
  • 第二点,所有的 API 都是 js 加密后才能访问。
  • 第三点,这也是最最要命的一点,访问特别特别不稳定。有的时候加载时间特别长,70 秒请求一个 API 这点我会告诉你吗?动不动就 404 not found 我能和你说?

当然,这些都难不倒我,我最后挑选了 Phantomjs, 编写 Js 调用脚本,从命令行调用程序,将抓取结果输出到标准输出流中,接着获取使用 beautifulsoup 进行基本的解析。剩下的就是入库了。

这里的技术点也是蛮多的,以后有机会就介绍一下.(汗,因为毕业设计这回事情实在是耽误了不少梳理博文的时间,攒了不少开了个头的文章,但自己又不忍心把不好的文章放出来污染大众视野.)

0x01 事情开始变化了

程序在运行了很长一段时间之后,有一定几率崩溃。再次开启的时候,有一些需要人工检查的参数,用 supervisor 并不是很方便。

0x02 那怎么该如何是好?

公司的电脑上写了每个小时将自己的抓取情况发送给我的邮箱,但是糟心的问题是,一旦我在家中,程序崩溃了,我也就只能浪费掉我那接近半天的抓取时间了。我必须要远程控制公司的电脑。怎么办呢?

  • 第一种,使用 ssh, 这样我在家里就可以远程控制公司的电脑了。
  • 第二种,使用远程控制软件。

我首先想到的是使用 ssh, 因为这个比较常用,用起来会习惯一些。

2.1 在家里配置 ssh 到公司的电脑上需要哪些方法呢?

请注意:

ssh 无法穿透路由器

什么意思?很简单,对于你在家里这个外网来说,你只能”看到”公司在公网的这台路由器,无法看到经过 NAT 转换的公司内网的服务器。

于是,我们可以得出远程方法如下:

  • 公司路由器的公网地址固定,那么可以在路由器上直接做一个端口映射,将路由器的 ip 的 22 端口(也可以是其他端口)映射到公司局域网内部的一台机器。这样你就可以直接 ssh 公司的路由器,但最终访问的就是你的 mac 或者 linux 机器了。
  • 那如果公司的路由器是拨号上网的呢(比如我现在待得这个小公司,使用的是电信宽带光纤拨号上网)? 很简单,通常情况下你需要及时获取公司公网的 ip 地址。所以,你只需要在你的公司电脑上写个脚本定时把公网的 ip 地址发给你的邮箱里就好了。

  • 在操作的时候,直接使用 tmux 或者 screen 就可以查看这些耗时软件的运行情况了。

但,我最后没有使用这个方案呢?因为电信把路由器的高级功能给阉割掉了,端口映射做不了。并且,由于公司的路由器均为普通网线口,并非光纤接口,唯一有光纤接口的就仅仅只有电信的路由器。

虽然 ssh 很方便,可是打电话找电信太麻烦,于是这个方案被我否定了。

2.2 那么远程控制软件怎么样呢?

经过不断的搜索,我发现了一款非常棒的穿透力特别强远程操作又相对稳定的软件。可能你也听说过这款软件 teamviewer.

前段时间也用这个软件给学弟们操作搭建部署环境的时候用到的,非常好用。比 qq 的远程协助稳定多了。

并且,可以通过注册账号,直接把机器分配给账号。

然后直接登录账号进行连接就好了。

操作界面.png

远程状态

╮(╯▽╰)╭所以,我就可以安安心心在家里阅读抓取情况的邮件,当邮件抓取数量出现异常的时候,我就直接开远程过去查看了,修整软件就好了。

写爬虫的感觉就像皇上批阅折子一样

0x03 结论

当然,其实最好的方式还是通过 ssh 配合 tmux 进行管理,但是如果你没有路由器的操作权限(不能做端口映射), 或者像我一样公司的上网环境比较坑(电信路由器)的话,teamviewer 也算是图形界面中优雅的远控方式。并且,可以使用 windows 控制 mac, 也可使用 mac 控制 windows, 这点实在让人非常心动。

> 后续:其实可以用路由器做两次端口转发的,当时没有想到这个两层端口转发。

ChangeLog:

  • 2017-03-14 重修文字,修正部分错误的说法