最近做一个项目时,发现购mai的厂商的代理似乎被识别了,总是拿不到正确的响应。于是尝试自己搭建了一个ADSL代理实现HTTP代理。

ADSL拨号代理:电信宽带每一次拨号后会更换IP,利用这一点在IP更换后将新的IP存入到代理池中。

代理的搭建过程分为以下几步:

(1)购买代理服务器,笔者选择了淘b_a_o上销Liang最高的一家;

(2)远程客fu给的代理服务器,拨号成功后,安装必要的软件;

(3)安装及启动TinyProxy搭建代理;

(4)安装python/编写HTTP代理池脚本;


一    购买代理服务器

先跟客fu沟通一下你要买什么类型的服务器,有混播/单地区类型,经过测试:混播服务器换IP质量很差,单地区类型的服务器虽然IP总是在同一个地区,但比较稳定。我的项目对于IP地区也没有要求,因此采用了单地区的服务器。购买后,客fu会提供一些服务器信息供你连接,以后连接这台ADSL服务器都靠这个来连:

二    远程服务器:拨号

使用xshell工具远程服务器,此时远程后,服务器是连不上外网的,需要拨号后才能连外网。我购mai的服务器是通过pppoe来拨号的,首先运行pppoe-setup,开始拨号:

(1)首先出现了LOGIN NAME  Enter your Login Name :——输入客服提供的服务器信息中的宽带账户名;

(2)输入网路介面卡,默认为eth0——这个我没管,用的默认;

(3)是否限制连线时长?长时间连接后是否自动中断连接,默认为否——这个直接enter跳过不管;

(4)输入dns服务器地址——这个可以去网上搜一搜常用的DNS服务器地址,我配置的是114.114.114.114(有时候这个dns会出问题。修改为223.5.5.5也OK)

(5)输入备用dns服务器地址——我配置的8.8.8.8

(6)输入连线密码——这个就输入客服给的宽带密码就OK

(7)重复输入连线密码——重复上一步输入的密码

(8)是否允许一般用户来操作DSL连接,默认为是——这个enter跳过用默认就行

(9)开机设置防火墙——这个输入0就好

(10)是否开机自动拨号——输入yes

(11)确认配置无误?——输入y确认无误。如果有误输入n重新填写

以上配置配好之后,此时还不能连网,需要执行命令连网断网。我买的这台服务器的命令是:

连接网络:/sbin/ifup ppp0,

断开连接:/sbin/ifdown ppp0,

查看网络状态:/sbin/pppoe-status

连接网络: adsl-start,

断开连接:adsl-stop,

如下图可以看到拨号成功,可以ping通外网:

注意:

(1)有时候采用adsl-stop/adsl-start命令后会拨号失败,连不上外网,所以我采用了客服给的ifdown  ifup拨号命令。

(2)拨号成功后可以ping一个ip和一个域名来测试一下网络连接状况。如果ping不通已知在网的IP且ping不通域名,则可能是连不上网络。如果是ping得通IP却ping不通域名,则可能是DNS服务器配置出错导致,修改DNS配置方法可参考该链接下的说明:https://www.cnblogs.com/dadadechengzi/p/6670530.html

三    TinyProxy代理搭建

1.安装TinyProxy

yum install -y epel-release

yum update -y     ——升级yum,可能会等很长一段时间

yum install -y tinyproxy

2.配置TinyProxy

(1)vi /etc/tinyproxy/tinyproxy.conf修改两处配置:端口号和允许连接该代理的IP白名单:

上图中,默认用8888端口作为代理端口,可以修改为你用作代理端口的端口号;

允许访问该代理端口的IP,默认为只有本机可以使用该代理,把这行注释掉可以使所有IP都可以使用该代理。

(2)配置完后,重启TinyProxy

systemctl enable tinyproxy.service

systemctl restart tinyproxy.service

防火墙开放你的配置的代理端口:

iptables -I INPUT -p tcp --dport 8888 -j ACCEPT

3.验证TinyProxy

在另一台主机上运行以下命令检查是否用了代理:

curl -x 代理服务器IP地址:代理端口 httpbin.org/get

上图中访问httpbin.org/get得到本地IP为119.23.xx.x,通过代理端口访问该地址,得到的IP地址为114.104.xx.x,这说明代理搭建成功。

四    安装python及编写脚本

1.安装python

下面是我的安装脚本,我每次都是直接用这个脚本来自动安装。

#!/usr/bin/env bash
yum -y install wget zlib zlib-devel openssl-devel gcc make
wget -P /usr/local/src/ https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
tar -xzvf /usr/local/src/Python-3.6.5.tgz

cd Python-3.6.5
./configure --prefix=/usr/local --with-ssl
make
make altinstall
make clean
cd ../
rm -rf Python-3.6.5*

ln -s /usr/local/bin/python3.6 /usr/bin/python3
ln -s /usr/local/bin/pip3.6 /usr/bin/pip3
pip3 install --upgrade pip
python3 -V && pip3 -V

2.编写更新代理的脚本

由于ADSL拨号服务器拨号后,IP已经变化为新的IP,这时候要通知其他使用IP者新的IP地址是什么,这就需要有一个接口或者缓存供其调用、存储变化后的IP。我这里采用redis来缓存。

import re, time, requests
from requests.exceptions import ConnectionError, ReadTimeout# coding=utf-8
# 拨号间隔
ADSL_CYCLE = 60*60*2
# 拨号出错重试间隔
ADSL_ERROR_CYCLE = 5
# ADSL命令
ADSL_BASH = '/sbin/ifdown ppp0;/sbin/ifup ppp0'
# 代理运行端口
PROXY_PORT = 8888
# 拨号网卡
ADSL_IFNAME = 'ppp0'
# 代理池键名
PROXY_KEY = 'adsl'
# 测试URL
TEST_URL = 'http://www.baidu.com'
# 测试超时时间
TEST_TIMEOUT = 20
# API端口
API_PORT = 8000# coding=utf-8
import re
import time
import requests
from requests.exceptions import ConnectionError, ReadTimeout
from redis import StrictRedis
import platformif platform.python_version().startswith('2.'):import commands as subprocess
elif platform.python_version().startswith('3.'):import subprocess
else:raise ValueError('python version must be 2 or 3')class Sender():def get_ip(self, ifname=ADSL_IFNAME):"""获取本机IP:param ifname: 网卡名称:return:"""(status, output) = subprocess.getstatusoutput('ifconfig')if status == 0:pattern = re.compile(ifname + '.*?inet.*?(\d+\.\d+\.\d+\.\d+).*?netmask', re.S)result = re.search(pattern, output)if result:ip = result.group(1)return ipdef test_proxy(self, proxy):"""测试代理:param proxy: 代理:return: 测试结果"""try:response = requests.get(TEST_URL, proxies={'http': 'http://' + proxy,'https': 'https://' + proxy}, timeout=TEST_TIMEOUT)if response.status_code == 200:return Trueexcept (ConnectionError, ReadTimeout):return Falsedef remove_proxy(self):"""移除代理:return: None"""redis = StrictRedis(host='xxx.xx.xx.x', port=26379, password='xxxxxx', db=0)redis.hdel('proxy', PROXY_KEY)print('Successfully Removed Proxy')def set_proxy(self, proxy):"""设置代理:param proxy: 代理:return: None"""rediscli = StrictRedis(host='xxx.xx.xx.x', port=26379, password='xxxxxx', db=0)if rediscli.hset('proxy', PROXY_KEY, proxy):print('Successfully Set Proxy', proxy)def adsl(self):"""拨号主进程:return: None"""while True:print('ADSL Start, Remove Proxy, Please wait')try:self.remove_proxy()except:pass(status, output) = subprocess.getstatusoutput(ADSL_BASH)if status == 0:print('ADSL Successfully')ip = self.get_ip()if ip:print('Now IP', ip)print('Testing Proxy, Please Wait')proxy = '{ip}:{port}'.format(ip=ip, port=PROXY_PORT)if self.test_proxy(proxy):print('Valid Proxy')self.set_proxy(proxy)print('Sleeping')time.sleep(ADSL_CYCLE)else:print('Invalid Proxy')else:print('Get IP Failed, Re Dialing')time.sleep(ADSL_ERROR_CYCLE)else:print('ADSL Failed, Please Check')time.sleep(ADSL_ERROR_CYCLE)if __name__ == '__main__':sender = Sender()sender.adsl()

3.代理池中的代理检查

打开redsi可以看到对应的db中已经有相应的代理。

ADSL拨号代理服务器实现HTTP代理的搭建过程相关推荐

  1. 利用ADSL拨号上网方式如何搭建服务器

    序:搭建服务器需要两个条件硬件服务器和固定公网IP,随便一台个人电脑都可以作为硬件服务器,就剩下一个问题,如何获得一个固定公网IP. 第一章 扫盲:ADSL拨号上网方式,本地IP与公网IP的区别 一. ...

  2. 关于在linux上面配置ADSL拨号代理的注意事项

    首先按照崔大的步骤安装代理:崔大ADSL拨号代理 安装的时候有几点需要注意: 第一个注意点: epel-release是一个源,类似pip的阿里源,这里也要把yum源换成阿里的,不然在执行yum命令时 ...

  3. Java实现Http代理服务器通过http代理进行内网安装yum软件

    Java实现Http代理服务器&通过http代理进行内网安装yum软件 1.Http代理服务器简介 2.Http代理服务器Java实现 2.1 Java源码 2.2 代码分析说明 3.通过ht ...

  4. C# 通过ADSL拨号更换IP

    环境 开发环境:vs2010 操作系统:win10 .net版本 : .net4.0 需求 当进行http请求的时候,短时间内同一个IP发送大量请求,有些网站会禁止这个IP获取到资源,这种时候就需要更 ...

  5. Python3爬虫教程之ADSL拨号爬虫ip池的使用

    在我之前做爬虫经常需要维护自己的爬虫ip池,他可以挑选出很多有用的爬虫地址,因为不是专业的而且这些爬虫ip通常是公共爬虫ip,所以可用率不是太高,而且这样类型的地址很大情况下都是多人共用的,被封地址概 ...

  6. linux拨号上网的命令,LINUX下ADSL拨号上网

    环境:RHEL 5 1.安装PPP包(ppp-2.4.4-1.el5.i386.rpm) # rpm -ivh ppp-2.4.4-1.el5.i386.rpm 2.安装pppoe包(rp-pppoe ...

  7. Ubuntu ADSL 拨号上网时断时续问题

    在使用 pppoeconf 后可能出现网络链接时断时续以及网络管理器显示设备未托管.原因是 NetWorkManager 与 networking 命令有冲突,不能混合使用.如果遇到该问题,请尝试: ...

  8. 基于认证的代理平台搭建配置squid-20130730

    基于认证的代理平台搭建配置squid-20130730 功能:通过squid代理实现 (1)基于用户名密码认证的出口ip路由选择 (2)基于client源ip的出口ip路由选择 (3)基于连接本机ip ...

  9. ADSL拨号中出现的错误代码

    ADSL拨号中出现的错误代码 Error 602 The port is already open 问题:拨号网络网络由于设备安装错误或正在使用,不能进行连接 原因:RasPPPoE没有完全和正确的安 ...

  10. linux系统如何拨号上网连接,教你在Linux下如何使用ADSL拨号上网

    教你在Linux下如何使用ADSL拨号上网 发布时间:2007-10-29 10:22:09来源:红联作者:demon 一.如果是新手刚开始使用Linxu的话,可用图形界面: 办法:直接在网络里建立新 ...

最新文章

  1. 多核片上系统(SoC)架构的嵌入式DSP软件设计
  2. 【Linux】24_网络管理数据链路层详解
  3. Fabio技术手册(2):部署
  4. C 中的static关键字
  5. 集群环境下,你不得不注意的ASP.NET Core Data Protection 机制
  6. [转]RxHttp 一条链发送请求,新一代Http请求神器(一)
  7. 女生在施工单位项目部上工作,是怎样一种体验?
  8. 数据降维之多维缩放MDS(Multiple Dimensional Scaling)
  9. django新闻页面编写
  10. 20200704每日一句
  11. [PYTHON] 核心编程笔记(11.Python函数和函数式编程)
  12. 网站可行性报告范文_邢台写可行性报告写立项报告范文-环建
  13. conda安装本地whl文件
  14. 安装极狐GitLab(ubuntu)----写给不爱看官方文档的人
  15. php用代码写的三行情书,三行情书经典语录_最美的三行情书(两行泪,一段情)
  16. 一个比较有趣的题:推算今天星期几
  17. h5案例分享 华谊电影《老炮儿》约战
  18. Groovy探索之MOP 十五 方法名的动态性(2)
  19. Fast Affine Template Matching over Galois Field仿射模板匹配数据测试问题
  20. 节日贺卡python制作

热门文章

  1. 数据结构例程——串的模式匹配(Brute-Force算法)
  2. 资料分析-第一章-统计术语
  3. python操作selenium
  4. 4.0版本的wed.xml。 中间的部分是配置springMVC的。
  5. 佳能LBP2900打印机无法正常打印.用32位驱动安装正常
  6. shell中各种括号(),[],(()),[[]],{}等的作用大全及示例
  7. iphone设置邮箱设置_如何使用iPhone设置Chromecast
  8. 计算机吴军科学家个人故事,吴军:阅读与写作50讲+吴军个人成长书单
  9. SVC vs SVR
  10. Alien Skin Exposure新版X8功能介绍