开机自动拨号(开机自动启动怎么关闭)

懵懂先生 投稿文章开机自动拨号(开机自动启动怎么关闭)已关闭评论83阅读模式

文章源自略懂百科-http://wswcn.cn/77021.html

我们在前面尝试维护过一个代理池,代理池可以挑选出许多可用代理,但是常常其稳定性不高、响应速度慢,而且这些代理通常是公共代理,可能不止一人同时使用,其 IP 被封的概率很大。另外,这些代理可能有效时间比较短,虽然代理池一直在筛选,但如果没有及时更新状态,也有可能获取到不可用的代理。文章源自略懂百科-http://wswcn.cn/77021.html

上一节我们也了解了付费代理的使用,付费代理的质量相对免费代理就会好不少,这的确已经是一个相对不错的方案了,但本节要介绍的方案可以使我们既能不断更换代理,又可以保证代理的稳定性。文章源自略懂百科-http://wswcn.cn/77021.html

在一些付费代理套餐中,大家可能会注意到有这样的一个套餐 - 独享代理或私密代理,这种其实就是用了专用服务器搭建了代理服务,相对一般的付费代理来说,其稳定性更好,速度也更快,同时 IP 可以动态变化。这种独享代理或私密代理的 IP 切换大多数都是基于 ADSL 拨号机制来实现的,一台云主机每拨号一次就可以换一个 IP,同时云主机上搭建了代理服务,我们就可以直接使用该云主机的 HTTP 代理来进行数据爬取了。文章源自略懂百科-http://wswcn.cn/77021.html

本节我们就来实际操作一下搭建 ADSL 拨号代理服务的方法。文章源自略懂百科-http://wswcn.cn/77021.html

1. 什么是 ADSL

ADSL,英文全称是 Asymmetric Digital Subscriber Line,即非对称数字用户环路。它的上行和下行带宽不对称,它采用频分复用技术把普通的电话线分成了电话、上行和下行 3 个相对独立的信道,从而避免了相互之间的干扰。文章源自略懂百科-http://wswcn.cn/77021.html

ADSL 通过拨号的方式上网,拨号时需要输入 ADSL 账号和密码,每次拨号就更换一个 IP。IP 分布在多个 A 段,如果 IP 都能使用,则意味着 IP 量级可达千万。如果我们将 ADSL 主机作为代理,每隔一段时间云主机拨号就换一个 IP,这样可以有效防止 IP 被封禁。另外,由于我们是直接使用专有的云主机搭建的代理服务,所以其代理的稳定性相对更好,代理响应速度也相对更快。文章源自略懂百科-http://wswcn.cn/77021.html

2. 准备工作

在本节开始之前,我们需要先购买几台 ADSL 代理云主机,建议 2 台或以上。因为云主机在拨号的一瞬间服务器正在切换 IP,所以拨号之后代理是不可用的状态,所以需要 2 台及以上云主机来做负载均衡。文章源自略懂百科-http://wswcn.cn/77021.html

ADSL 代理云主机的服务商还是比较多的,个人推荐的有阿斯云、云立方等,其官网分别为:文章源自略懂百科-http://wswcn.cn/77021.html

阿斯云:https://asiyun.cn/云立方:https://www.yunlifang.cn/文章源自略懂百科-http://wswcn.cn/77021.html

本节案例中,我们以阿斯云为例,购买了一台电信型同时安装了 CentOS Linux 系统的云主机。文章源自略懂百科-http://wswcn.cn/77021.html

购买成功之后,我们可以在后台找到服务器的连接 IP、端口、用户名、密码,拨号所用的用户名和密码,如图所示:文章源自略懂百科-http://wswcn.cn/77021.html

然后找到远程管理面板 − 远程连接的用户名和密码,也就是 SSH 远程连接服务器的信息。比如我使用的 IP 和端口是 zhongweidx01.jsq.bz:30042,用户名是 root,命令行下输入如下内容:文章源自略懂百科-http://wswcn.cn/77021.html

sshroot@zhongweidx01.jsq.bz -p30042文章源自略懂百科-http://wswcn.cn/77021.html

输入连接密码,就可以连接上远程服务器了,如图所示:文章源自略懂百科-http://wswcn.cn/77021.html

登录成功之后,我们便可以开始本节的正式内容了。文章源自略懂百科-http://wswcn.cn/77021.html

3. 测试拨号

云主机默认已经配置了拨号相关的信息,如宽带用户名和密码等,所以我们无需额外进行配置,只需要调用相应的拨号命令即可实现拨号和 IP 地址的切换。文章源自略懂百科-http://wswcn.cn/77021.html

我们可以输入如下拨号命令来进行拨号:文章源自略懂百科-http://wswcn.cn/77021.html

pppoe-start文章源自略懂百科-http://wswcn.cn/77021.html

拨号命令成功运行,没有报错信息,耗时约几秒,结束之后整个主机就获得了一个有效的 IP 地址。文章源自略懂百科-http://wswcn.cn/77021.html

如果要停止拨号,可以输入如下命令:文章源自略懂百科-http://wswcn.cn/77021.html

pppoe-stop文章源自略懂百科-http://wswcn.cn/77021.html

运行完该命令后,网络就会断开,之前的 IP 地址也会被释放。文章源自略懂百科-http://wswcn.cn/77021.html

注意:不同的云主机的拨号命令可能不同,如云立方主机的拨号命令为 adsl-start 和 adsl-stop,请以官方文档的说明为准。文章源自略懂百科-http://wswcn.cn/77021.html

所以,如果要想切换 IP,我们只需要将上面的两个命令组合起来,先执行 pppoe-stop,再执行 pppoe-start。每次拨号,ifconfig 命令观察主机的 IP,如图所示:文章源自略懂百科-http://wswcn.cn/77021.html

可以看到,这里我们执行了停止和开始拨号的命令之后,通过 ifconfig 命令获取的网卡信息的 IP 地址就变化了,所以我们成功实现了 IP 地址的切换。文章源自略懂百科-http://wswcn.cn/77021.html

好,那如果我们要想将这台云主机设置为可以实时变化 IP 的代理服务器的话,主要就有这几件事情:文章源自略懂百科-http://wswcn.cn/77021.html

在云主机上运行代理服务软件,使之可以提供 HTTP 代理服务实现云主机定时拨号更换 IP实时获取云主机的代理 IP 和端口信息文章源自略懂百科-http://wswcn.cn/77021.html

接下来我们就来完成这几部分内容吧。文章源自略懂百科-http://wswcn.cn/77021.html

4. 设置代理服务器

当前我们使用的云主机使用的是 Linux 的 CentOS 系统,目前它是无法作为一个 HTTP 代理服务器来使用的,因为该云主机上面目前并没有运行相关的代理软件。要想让该云主机提供 HTTP 代理服务,我们需要在其上面安装并运行相关的代理服务。文章源自略懂百科-http://wswcn.cn/77021.html

那什么软件能提供这种代理服务呢?目前业界比较流行的有 Squid 和 TinyProxy,配置完成之后它们会在特定端口上运行一个 HTTP 代理。知道了该云主机当前的 IP 之后,我们就能使用该云主机上 Squid 或 TinyProxy 提供的 HTTP 代理了。文章源自略懂百科-http://wswcn.cn/77021.html

这里我们以 Squid 为例来进行一下配置。文章源自略懂百科-http://wswcn.cn/77021.html

首先我们安装一下 Squid,在 CentOS 的安装命令如下:文章源自略懂百科-http://wswcn.cn/77021.html

sudoyum -y updateyum-y install squid文章源自略懂百科-http://wswcn.cn/77021.html

运行完之后,我们便可以成功安装好 Squid 了。文章源自略懂百科-http://wswcn.cn/77021.html

如果要想启动 Squid,可以运行如下命令:文章源自略懂百科-http://wswcn.cn/77021.html

systemctlstart squid文章源自略懂百科-http://wswcn.cn/77021.html

如果想配置开机自动启动,可以运行如下命令:文章源自略懂百科-http://wswcn.cn/77021.html

systemctlenablesquid文章源自略懂百科-http://wswcn.cn/77021.html

Squid 成功运行之后,我们可以使用如下命令查看当前 Squid 的运行状态:文章源自略懂百科-http://wswcn.cn/77021.html

systemctlstatussquid文章源自略懂百科-http://wswcn.cn/77021.html

如图所示,我们可以看到 Squid 就成功运行了:文章源自略懂百科-http://wswcn.cn/77021.html

默认情况下,Squid 会运行在 3128 端口,也就是相当于在云主机的 127.0.0.1:3128 上启动了代理服务,接下来我们可以来测试下 Squid 的代理效果,在该台云主机上运行 curl 命令请求 https://httpbin.org,并配置使用云主机的代理:文章源自略懂百科-http://wswcn.cn/77021.html

curl-x http://127.0.0.1:3128 https://httpbin.org/get文章源自略懂百科-http://wswcn.cn/77021.html

这里 curl 的 -x 参数代表设置 HTTP 代理,由于这是在云主机上运行的,所以代理直接设置为了 http://127.0.0.1:3128。文章源自略懂百科-http://wswcn.cn/77021.html

运行完毕之后,我们再运行下 ifconfig 获取下当前云主机的 IP,运行结果如图所示:文章源自略懂百科-http://wswcn.cn/77021.html

可以看到返回结果的 origin 字段的 IP 就和 ifconfig 获取的 IP 地址是一致的。文章源自略懂百科-http://wswcn.cn/77021.html

接下来,我们在自己本机上(非云主机)运行如下命令测试下代理的连通情况,这里 IP 就需要更换为云主机本身的 IP 了,刚才可以看到云主机当前拨号的 IP 是 106.45.104.166,所以需要运行如下命令:文章源自略懂百科-http://wswcn.cn/77021.html

curl-x http://106.45.104.166:3128 https://httpbin.org/get文章源自略懂百科-http://wswcn.cn/77021.html

然而发现并没有对应的输出结果,代理连接失败。文章源自略懂百科-http://wswcn.cn/77021.html

其实原因在于默认情况下 Squid 并没有开启允许外网访问,我们可以进行 Squid 的相关配置,如更改当前代理运行端口、允许连接的 IP,配置高匿代理等等,这些都需要修改 /etc/squid/squid.conf 文件。文章源自略懂百科-http://wswcn.cn/77021.html

要允许公网访问,最简单的方案就是将 /etc/squid/squid.conf 中的该行:文章源自略懂百科-http://wswcn.cn/77021.html

http_accessdenyall文章源自略懂百科-http://wswcn.cn/77021.html

修改为:文章源自略懂百科-http://wswcn.cn/77021.html

http_accessallowall文章源自略懂百科-http://wswcn.cn/77021.html

意思是允许来自所有 IP 的请求连接。文章源自略懂百科-http://wswcn.cn/77021.html

另外还需要在配置文件的开头 acl 配置的部分添加该行内容:文章源自略懂百科-http://wswcn.cn/77021.html

aclallsrc0.0.0.0/0文章源自略懂百科-http://wswcn.cn/77021.html

另外我们还想将 Squid 配置成高度匿名代理,这样目标网站就无从通过一些参数如 X-Forwarded-For 来得知爬虫机本身的 IP 了,所以在配置文件中再添加如下配置:文章源自略懂百科-http://wswcn.cn/77021.html

request_header_accessVia denyallrequest_header_accessX-Forwarded-For denyall文章源自略懂百科-http://wswcn.cn/77021.html

另外有的云主机厂商可能默认封禁了 Squid 的 3128 端口,建议更换一个端口,比如 3328,修改改行:文章源自略懂百科-http://wswcn.cn/77021.html

http_port3128文章源自略懂百科-http://wswcn.cn/77021.html

修改为:文章源自略懂百科-http://wswcn.cn/77021.html

http_port3328文章源自略懂百科-http://wswcn.cn/77021.html

修改完配置之后保存配置文件,然后重新启动 Squid 即可:文章源自略懂百科-http://wswcn.cn/77021.html

systemctlrestart squid文章源自略懂百科-http://wswcn.cn/77021.html

这时候在本机上(非云主机)重新运行刚才的 curl 命令,同时更改下端口:文章源自略懂百科-http://wswcn.cn/77021.html

curl-x http://106.45.104.166:3328 https://httpbin.org/get文章源自略懂百科-http://wswcn.cn/77021.html

即可得到返回结果:文章源自略懂百科-http://wswcn.cn/77021.html

{"args": {},"headers": {"Accept":"*/*","Host":"httpbin.org","User-Agent":"curl/7.64.1","X-Amzn-Trace-Id":"Root=1-60ea8fc0-0701b1494e4680b95889cdb1"},"origin":"106.45.104.166","url":"https://httpbin.org/get"}文章源自略懂百科-http://wswcn.cn/77021.html

这时候我们就可以在本机上直接使用云主机的代理了!文章源自略懂百科-http://wswcn.cn/77021.html

5. 动态获取 IP

现在我们已经可以执行命令让主机动态切换 IP 了,同时也在主机上搭建好代理服务器了,接下来我们只需要知道拨号后的 IP 就可以使用代理了。文章源自略懂百科-http://wswcn.cn/77021.html

那怎么动态获取拨号主机的 IP 呢?又怎么来维护这些代理呢?怎么保证获取到的代理一定是可用的呢?这时候我们可能想到一些问题:文章源自略懂百科-http://wswcn.cn/77021.html

如果我们只有一台拨号云主机并设置了定时拨号的话,那么在拨号的几秒时间内,该云主机提供的代理服务是不可用的。如果我们不用定时拨号的方法,而想要在爬虫端控制拨号云主机的拨号操作的话,爬虫端还需要单独的逻辑来处理拨号和重连的问题,这会带来额外的开销。文章源自略懂百科-http://wswcn.cn/77021.html

综合考虑下来,一个比较好的解决方案是:文章源自略懂百科-http://wswcn.cn/77021.html

为了不增加爬虫端的逻辑开销,爬虫端应该无需关心拨号云主机的拨号操作,我们只需要保证爬虫通过某个接口获取到的代理是可用的就行了,拨号云主机的代理的维护逻辑和爬虫是毫不相关的。为了解决一台拨号云主机在拨号时代理不可用的问题,我们需要有多台云主机同时提供代理服务,我们可以将不同云主机的拨号时段错开,当一台云主机正在拨号时,我们可以用其他云主机顶替。为了更加方便地维护和使用代理,我们可以像前文介绍的代理池一样把这些云主机的代理统一维护起来,所有拨号云主机的代理统一存储到一个公共的 Redis 数据库中,可以使用 Redis 的 Hash 存储方式,存好每台云主机和对应代理的映射关系。拨号云主机拨号前将自己对应的代理内容清空,拨号成功之后再将代理更新,这样 Redis 数据库中的代理就一定是实时可用的代理了。文章源自略懂百科-http://wswcn.cn/77021.html

利用这种思路,我们要做的其实就有如下几点:文章源自略懂百科-http://wswcn.cn/77021.html

配置一个可以公网访问的 Redis 数据库,每台云主机可以将自己的代理存储到对应的 Redis 数据库中,由该 Redis 数据库维护这些代理。申请多台拨号云主机并按照上文所述配置好 Squid 代理服务,每台云主机设置定时拨号来更换 IP。每台云主机在拨号前删除 Redis 数据库中原来的代理,拨号成功之后测试一下代理的可用性,将最新的代理更新到 Redis 数据库中即可。文章源自略懂百科-http://wswcn.cn/77021.html

OK,接下来我们就来操作一下吧。文章源自略懂百科-http://wswcn.cn/77021.html

由于云主机要进行 Redis 数据库的操作,所以我们可以使用 Python 来实现,所以先在云主机上装下 Python:文章源自略懂百科-http://wswcn.cn/77021.html

yum-y install python3文章源自略懂百科-http://wswcn.cn/77021.html

关于自动拨号、连接 Redis 数据库、获取本机代理、设置 Redis 数据库的操作,我已经写好了一个 Python 的包并发布到 PyPi 了,我们可以直接使用这个包来完成如上的功能,这个包叫做 adslproxy,可以在云主机上使用 pip3 来安装:文章源自略懂百科-http://wswcn.cn/77021.html

pip3install adslproxy文章源自略懂百科-http://wswcn.cn/77021.html

安装完毕之后,我们可以使用 export 命令设置下环境变量:文章源自略懂百科-http://wswcn.cn/77021.html

exportREDIS_HOST=exportREDIS_PORT=exportREDIS_PASSWORD=exportPROXY_PORT=<拨号云主机配置的代理端口>exportDIAL_BASH=<拨号脚本>exportDIAL_IFNAME=<网卡名称>exportCLIENT_NAME=<云主机的唯一标识>exportDIAL_CYCLE=<拨号间隔>文章源自略懂百科-http://wswcn.cn/77021.html

这里 REDIS_HOST、REDIS_PORT、REDIS_PASSWORD 就是远程 Redis 的连接信息,就不再赘述了。PROXY_PORT 就是云主机上代理服务的端口,我们已经设置为了 3328。DIAL_BASH 就是拨号的命令,即 pppoe-stop;pppoe-start,当然该脚本的内容不同的云主机厂商可能不同,以实际为准。DIAL_IFNAME 即拨号云主机上的网卡名称,程序可以通过获取该网卡的信息来获取当前拨号主机的 IP 地址,通过上述操作可以发现,网卡名称叫做 ppp0,当然这个名称也是以实际为准。CLIENT_NAME 就是云主机的唯一标识,用来在 Redis 中存储主机和代理的映射,因为我们有多台云主机,所以不同云主机的名称应该设置为不同的字符串,比如 adsl1、adsl2 等等。文章源自略懂百科-http://wswcn.cn/77021.html

这里我们设置如图所示:文章源自略懂百科-http://wswcn.cn/77021.html

设置好环境变量之后,我们就可以运行 adslproxy 命令来进行拨号了,命令如下:文章源自略懂百科-http://wswcn.cn/77021.html

adslproxysend文章源自略懂百科-http://wswcn.cn/77021.html

运行结果如下:文章源自略懂百科-http://wswcn.cn/77021.html

2021-07-1115:30:03.062|INFO|adslproxy.sender.sender:loop:90-Startingdial...2021-07-1115:30:03.063|INFO|adslproxy.sender.sender:run:99-Dialstarted,removeproxy2021-07-1115:30:03.063|INFO|adslproxy.sender.sender:remove_proxy:62-Removingadsl1...2021-07-1115:30:04.065|INFO|adslproxy.sender.sender:remove_proxy:69-Removedadsl1successfully2021-07-1115:30:05.373|INFO|adslproxy.sender.sender:run:111-GetnewIP106.45.105.332021-07-1115:30:15.552|INFO|adslproxy.sender.sender:run:120-Validproxy106.45.105.33:33282021-07-1115:30:16.501|INFO|adslproxy.sender.sender:set_proxy:82-Successfullysetproxy106.45.105.33:33282021-07-1115:33:36.678|INFO|adslproxy.sender.sender:loop:90-Startingdial...2021-07-1115:33:36.679|INFO|adslproxy.sender.sender:run:99-Dialstarted,removeproxy2021-07-1115:33:36.680|INFO|adslproxy.sender.sender:remove_proxy:62-Removingadsl1...2021-07-1115:33:37.214|INFO|adslproxy.sender.sender:remove_proxy:69-Removedadsl1successfully2021-07-1115:33:38.617|INFO|adslproxy.sender.sender:run:111-GetnewIP106.45.105.2192021-07-1115:33:48.750|INFO|adslproxy.sender.sender:run:120-Validproxy106.45.105.219:3328...文章源自略懂百科-http://wswcn.cn/77021.html

这里我们就可以看到,因为云主机在拨号之后当前代理就会失效了,所以在拨号之前程序先尝试从 Redis 中删除当前云主机的代理。接下来就开始执行拨号操作,拨号成功之后验证一下代理是可用的,然后再将该代理存储到 Redis 数据库中。循环往复运行,我们就达到了定时更换 IP 的效果,同时 Redis 数据库中也是实时可用的代理。文章源自略懂百科-http://wswcn.cn/77021.html

最后按照同样的配置,我们可以购买多台拨号云主机并进行如上同样的设置,这样就有多个稳定的定时更新的代理可用了,Redis 中会实时更新各台云主机的代理,如图所示。文章源自略懂百科-http://wswcn.cn/77021.html

图中所示是四台 ADSL 拨号云主机配置并运行后 Redis 数据库中的内容,其中的代理都是实时可用的。文章源自略懂百科-http://wswcn.cn/77021.html

6. 使用代理

那怎么使用代理呢?我们可以在任意可以公网访问的云主机上连接刚才的 Redis 数据库并搭建一个 API 服务即可。怎么搭建呢?我们可以同样使用刚才的 adslproxy 库,该库也提供了 API 服务的功能。文章源自略懂百科-http://wswcn.cn/77021.html

为了方便测试,我们在本机进行测试,安装好 adslproxy 包之后,然后设置好 REDIS 相关的环境变量:文章源自略懂百科-http://wswcn.cn/77021.html

exportREDIS_HOST=exportREDIS_PORT=exportREDIS_PASSWORD=文章源自略懂百科-http://wswcn.cn/77021.html

然后运行如下命令启动即可:文章源自略懂百科-http://wswcn.cn/77021.html

2020-07-1116:31:58.651|INFO|adslproxy.server.server:serve:68-APIlisteningonhttp://0.0.0.0:8425文章源自略懂百科-http://wswcn.cn/77021.html

可以看到 API 服务就在 8425 端口上运行了,我们打开浏览器即可访问首页,如图所示:文章源自略懂百科-http://wswcn.cn/77021.html

其中最重要的就是 random 接口了,我们使用 random 接口即可获取 Redis 数据库中的一个随机代理,如图所示:文章源自略懂百科-http://wswcn.cn/77021.html

测试下可用性也没有问题,这样爬虫就可以使用这个代理来进行数据爬取了。文章源自略懂百科-http://wswcn.cn/77021.html

最后,我们将 API 服务部署一下,这个 ADSL 代理服务就可以像代理池一样被使用了,每请求一次 API 就可以获取一个实时可用代理,不同的时间段这个代理就会实时更换,而且连接稳定速度又快,实在是网络爬虫的最佳搭档。文章源自略懂百科-http://wswcn.cn/77021.html

7. 总结

本节我们介绍了 ADSL 拨号代理的搭建过程。通过这种代理,我们可以无限次更换 IP,而且线路非常稳定,爬虫抓取效果也会好很多。文章源自略懂百科-http://wswcn.cn/77021.html

本节代码:https://github.com/Python3WebSpider/AdslProxy。文章源自略懂百科-http://wswcn.cn/77021.html

文章源自略懂百科-http://wswcn.cn/77021.html

懵懂先生
  • 本文由 发表于 2022年12月16日 23:23:13
  • 转载请注明:http://wswcn.cn/77021.html
投稿文章

关于离别的诗有哪些(关于离别的诗)

送别诗,是抒发诗人离别之情的汉族诗歌。著名的代表人物有李白,王维,王昌龄等。送别诗抒写离别情绪,是分离时迸发的情感火花。要把这种情感火花表达出来,并不是一件容易的事。清代著名诗人袁枚对此深有体会:"凡...
投稿文章

好文: 什么耳机伤听力

当音乐欣赏成为一种潮流,当网络游戏成为一种偏爱,当视频观看成为一种日常,那耳机的佩戴无疑是一种兼具流行与绝佳音效享受的标配。我们在日常生活中时常看到戴着耳机的人,他们或是在享受音乐,或是在通话,或是在...
投稿文章

荣耀10x(荣耀10x多少钱)

点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事! 在低价位使用高性能处理器的神机常有,但是在低价位使用旗舰影像传感器的手机却不常有。上个月刚发布的荣耀X10 算是后者...
投稿文章

上坟烧香四根香(烧香时中间香灭了预兆)

​今天清明扫墓了的人都知道,祭奠祖先上香时一定要点三根香。还有,礼佛时上三根香,拜神时上三根香……为何上香一律都是三根香呢? 原来,这点三根香是大有深意的,不同信仰的寓意各不相同。 礼佛时点燃的三根香...