首页 > 编程知识 正文

adsl拨号服务器,adsl宽带拨号王

时间:2023-05-03 07:44:00 阅读:253564 作者:2509

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

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

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

(1)购买代理服务器,笔者选择天下数据的;

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

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

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

​远程服务器:拨号

使用xshell工具远程服务器,此时远程后,服务器是连不上外网的,需要拨号后才能连外网。我购超帅的曲奇的服务器是通过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重新填写

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

连接网络:/sjddsb/ifup ppp0,

断开连接:/sjddsb/ifdown ppp0,

查看网络状态:/sjddsb/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地址:代理端口httpjddsb.org/get

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

四安装python及编写脚本

1.安装python

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

#!/usr/jddsb/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/jddsb/python3.6/usr/jddsb/python3

ln-s/usr/local/jddsb/pip3.6/usr/jddsb/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=60602

#拨号出错重试间隔

ADSL_ERROR_CYCLE=5

#ADSL命令

ADSL_BASH=’/sjddsb/ifdown ppp0;/sjddsb/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:Null

“”"

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:Null

“”"

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:Null

“”"

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==‘超帅的曲奇n’:

sender=Sender()

sender.adsl()

3.代理池中的代理检查

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。