
qq:800819103
在线客服,实时响应
qq群
在线客服,实时响应
客服电话
400-998-9776转3
最近做一个项目时,发现购mai的厂商的代理似乎被识别了,总是拿不到正确的响应。于是尝试自己搭建了一个ADSL代理实现HTTP代理。
ADSL拨号代理:电信宽带每一次拨号后会更换IP,利用这一点在IP更换后将新的IP存入到代理池中。
代理的搭建过程分为以下几步:
(1)购买代理服务器,笔者选择天下数据的;
(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 platform
if 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 ip
def 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 True
except(ConnectionError,ReadTimeout):
return False
def 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中已经有相应的代理。
转载注明来自:智游代理IP http://www.zhiyoudaili.com/
相关文章内容简介
1 使用代理服务器能否增加流量?
数据流量的获得一直以来全是许多营销运营工作人员的侧重点,代理服务器能否在这些方面具有协助呢?许多新媒体营销总结会根据发帖子的方法去吸引住粉絲,这种帖子一般都具备及时性,对于当今受欢迎的话题讨论,或是有探讨性的人物。这类种类的帖子盈利十分高,可是一旦被网址发觉是具备广告宣传特性的,都是会被删除。许多有关工作中的工作人员也发觉,假如用同一个ip发布许多同种类的帖子,很有可能这一ip都是会被网址禁掉。这个时候就必须高品质代理IP的协助了。假如想让浏览网页页面用http代理是比较简单的,最先,寻找功能强大的http代理,随后在Internet选择项中,选定“联接”菜单栏,随后点一下局域网设置,在相对的IP地址栏中填好不久寻找的http代理和端口号,点一下明确,那样就完成了网页页面的拆换。要是在网页搜索IP,就可以见到拆换后的IP了。根据更改ip的方法,我们可以提升公布帖子的高效率,也不会那么非常容易被删掉。... [阅读全文]
2 代理服务器如何认证
代理服务器可以作为访问控制设备使用。HTTP定义了一种名为代理服务器认证(poauthentication)的机制,这种机制可以阻止对内容的请求,直到用户向代理服务器提供了有效的访问权限证书为止。1):对受限内容的请求到达一台代理服务器时,代理服务器可以返回一个要求使用访问证书的407 Proxy Authorization Required状态码,以及一个用于描述怎样提供这些证书的Proxy-Authenticate首部字段。2):客户端收到407响应时,会尝试着从本地数据库中,或者通过提示用户来搜集所需要的证书。3):只要获得了证书,客户端就会重新发送请求,在Proxy-authorization首部字段中提供所要求的证书。4):如果证书有效,代理就会将原始请求沿着传输链路向下传送,否则,就发送另一条407应答。若传输链路中有多个代理服务器,且每个代理服务器都要进行认证时,代理服务器认证通常无法很好地工作。人们建议,应该对HTTP进行升级,将认证证书与代理服务器链中特定的路标联系起来,但这些升级措施并没有得到广泛实现。... [阅读全文]
热门标签
最新标签
推荐阅读
01
2018-11
无法连接到代理服务器怎么办?
随着社会科技的发展,互联网发展很快,很多行业都用到了代理服务器,其实也很正常,代理服务器的作用是非常多的。
17
2020-04
代理服务器和DMZ
通常与防火墙结合的功能是代理服务器。代理服务器用于访问其他计算机的Web页面。当另一台计算机请求网页时,它由代理服务器检索,然后发送到请求计算机。此操作的最终效果是托管网页的
22
2018-11
路由器接入Internet与代理服务器原理
目前的代理服务器都是以软件的形式安装于局域网的一台计算机中,同时该计算机要有一个出口使得路由器接入Internet,能够选择的接入方式也有很多。
21
2019-09
代理服务器的主要用途
HTTP代理服务器是安装在某些网络计算机服务器上的软件(如squid,wingate和ccproxy)。我们通常只称它为代理。代理的主要目的是在两台计算机(客户端和服务器)之间中继流量。通常它会进行一
15
2019-01
代理服务器简介
代理服务器是在计算机上运行的专用计算机或软件系统,其充当端点设备(例如计算机)与用户或客户端从其请求服务的另一服务器之间的中介。
06
2018-11
网关和代理服务器有什么区别?
代理服务器和网关都会把网络内部的数据的数据发送到因特网上。如果把网关比作一扇通向因特网的门,代理服务器就是一堵墙,能够避免暴露网络内部的一些重要信息。
热门文章