Full Code of Germey/ADSLProxyPool for AI

master 10af51b58711 cached
11 files
7.1 KB
2.1k tokens
23 symbols
1 requests
Download .txt
Repository: Germey/ADSLProxyPool
Branch: master
Commit: 10af51b58711
Files: 11
Total size: 7.1 KB

Directory structure:
gitextract_y7d4rabp/

├── .gitignore
├── README.md
├── client/
│   ├── __init__.py
│   ├── config.py
│   └── sender.py
├── client.py
├── server/
│   ├── __init__.py
│   ├── config.py
│   ├── db.py
│   └── receiver.py
└── server.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
/.idea
*.pyc

================================================
FILE: README.md
================================================
# ADSL拨号服务器代理设置

更优的选择:https://github.com/Python3WebSpider/AdslProxy

## 服务端

服务端即远程主机

### 安装Python

Python3版本


### 安装库

```
pip3 install redis tornado
```

### Clone项目

```
git clone https://github.com/Germey/ADSLProxyPool.git
```

### 安装Redis

安装Redis并启动服务

### 修改配置

```
cd server
vi config.py
```

根据注释修改配置文件

### 运行

根目录运行

```
python3 server.py
```

## 客户端

客户端即拨号主机

### 安装Python

Python3版本


### 安装库

```
pip3 install requests
```

### Clone项目

```
git clone https://github.com/Germey/ADSLProxyPool.git
```


### 修改配置

```
cd server
vi config.py
```

根据注释修改配置文件

### 运行

根目录运行

```
python3 client.py
```


================================================
FILE: client/__init__.py
================================================


================================================
FILE: client/config.py
================================================
# 拨号间隔
ADSL_CYCLE = 100
# ADSL命令
ADSL_BASH = 'adsl-stop;adsl-start'

# 代理端口
PROXY_PORT = 8888

# 服务器地址
SERVER_URL = 'http://120.27.34.24:8000'

# 通信秘钥
TOKEN = 'adsl'

# 客户端唯一标识
CLIENT_NAME = 'adsl1'

# 拨号网卡
ADSL_IFNAME = 'ppp0'

================================================
FILE: client/sender.py
================================================
import re
import subprocess

import time

from client.config import *
import requests
from requests.exceptions import ConnectionError


class Sender():


    def get_ip(self, ifname=ADSL_IFNAME):
        (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 adsl(self):
        while True:
            print('ADSL Start, Please wait')
            (status, output) = subprocess.getstatusoutput(ADSL_BASH)
            if status == 0:
                print('ADSL Successfully')
                ip = self.get_ip()
                if ip:
                    print('New IP', ip)
                    try:
                        requests.post(SERVER_URL, data={'token': TOKEN, 'port': PROXY_PORT, 'name': CLIENT_NAME})
                        print('Successfully Sent to Server', SERVER_URL)
                    except ConnectionError:
                        print('Failed to Connect Server', SERVER_URL)
                    time.sleep(ADSL_CYCLE)
                else:
                    print('Get IP Failed')
            else:
                print('ADSL Failed, Please Check')
            time.sleep(1)


def run():
    sender = Sender()
    sender.adsl()


if __name__ == '__main__':
    run()


================================================
FILE: client.py
================================================
from client.sender import run

if __name__ == '__main__':
    run()

================================================
FILE: server/__init__.py
================================================


================================================
FILE: server/config.py
================================================
# Redis数据库IP
REDIS_HOST = 'localhost'
# Redis数据库密码, 如无则填None
REDIS_PASSWORD = 'foobared'
# Redis数据库端口
REDIS_PORT = 6379
# 代理池键名
PROXY_KEY = 'adsl'
# 通信秘钥
TOKEN = 'adsl'
# 验证URL
TEST_URL = 'http://www.baidu.com'
# 接收器运行端口
RECEIVER_PORT = 8000
# 检测间隔
TEST_CYCLE = 20


================================================
FILE: server/db.py
================================================
import redis
import random
from server.config import *


class RedisClient(object):
    def __init__(self, host=REDIS_HOST, port=REDIS_PORT):
        self.db = redis.Redis(host=host, port=port, password=REDIS_PASSWORD)
        self.proxy_key = PROXY_KEY
    
    def key(self, name):
        return '{key}:{name}'.format(key=self.proxy_key, name=name)
    
    def set(self, name, proxy):
        return self.db.set(self.key(name), proxy)

    def get(self, name):
        return self.db.get(self.key(name)).decode('utf-8')

    def count(self):
        return len(self.db.keys(self.key('*')))
    
    def remove(self, name):
        return self.db.delete(self.key(name))

    def keys(self):
        return [key.decode('utf-8').replace(self.proxy_key + ':', '') for key in self.db.keys(self.key('*'))]

    def all(self):
        keys = self.keys()
        proxies = [{'name': key, 'proxy': self.get(key)} for key in keys]
        return proxies

    def random(self):
        items = self.all()
        return random.choice(items).get('proxy')

    def list(self):
        keys = self.keys()
        proxies = [self.get(key) for key in keys]
        return proxies

    def first(self):
        return self.get(self.keys()[0])


if __name__ == '__main__':
    client = RedisClient()
    client.set('a', 'abc')
    client.set('c', 'abc2')
    client.set('c', 'abc3')
    client.set('b', 'abc4')
    client.remove('b')
    result = client.get('a')
    print(client.count())
    print(client.all())
    print(result)



================================================
FILE: server/receiver.py
================================================
import json
from urllib.parse import urlencode, parse_qs, urlsplit

import tornado.ioloop
import tornado.web
from tornado.curl_httpclient import CurlAsyncHTTPClient
from tornado.web import RequestHandler, Application
from server.config import *
from server.db import RedisClient
from tornado.httpclient import HTTPRequest


class MainHandler(RequestHandler):
    redis = RedisClient()
    http_client = CurlAsyncHTTPClient(force_instance=True)

    def handle_proxy(self, response):
        request = response.request
        host = request.proxy_host
        port = request.proxy_port
        name = parse_qs(urlsplit(request.url).query).get('name')[0]
        proxy = '{host}:{port}'.format(host=host, port=port)
        if response.error:
            print('Request failed Using', proxy, response.error)
            print('Invalid Proxy', proxy, 'Remove it')
            self.redis.remove(name)
        else:
            print('Valid Proxy', name)

    def test_proxies(self):
        print('Test Proxies')
        items = self.redis.all()
        for item in items:
            self.test_proxy(item)

    def test_proxy(self, item):
        proxy = item.get('proxy')
        name = item.get('name')
        try:
            (proxy_host, proxy_port) = tuple(proxy.split(':'))
            print('Testing Proxy', name, proxy)
            test_url = TEST_URL + '?' + urlencode({'name': name})
            request = HTTPRequest(url=test_url, proxy_host=proxy_host, proxy_port=int(proxy_port))
            self.http_client.fetch(request, self.handle_proxy)
        except ValueError:
            print('Invalid Proxy', proxy)
            self.redis.remove(name)

    def post(self):
        token = self.get_body_argument('token', default=None, strip=False)
        port = self.get_body_argument('port', default=None, strip=False)
        name = self.get_body_argument('name', default=None, strip=False)
        if token == TOKEN and port:
            ip = self.request.remote_ip
            proxy = ip + ':' + port
            print('Receive proxy', proxy)
            self.redis.set(name, proxy)
            self.test_proxies()
        elif token != TOKEN:
            self.write('Wrong Token')
        elif not port:
            self.write('No Client Port')

    def get(self, api):
        if api == 'first':
            result = self.redis.first()
            if result:
                self.write(result)

        if api == 'random':
            result = self.redis.random()
            if result:
                self.write(result)

        if api == 'list':
            result = self.redis.list()
            print(result)
            if result:
                for proxy in result:
                    self.write(proxy + '<br>')

        if api == 'count':
            self.write(str(self.redis.count()))


def run():
    application = Application([
        (r'/', MainHandler),
        (r'/(.*)', MainHandler),
    ])
    print('Listening on', RECEIVER_PORT)
    application.listen(RECEIVER_PORT)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == '__main__':
    run()


================================================
FILE: server.py
================================================
from server.receiver import run

if __name__ == '__main__':
    run()
Download .txt
gitextract_y7d4rabp/

├── .gitignore
├── README.md
├── client/
│   ├── __init__.py
│   ├── config.py
│   └── sender.py
├── client.py
├── server/
│   ├── __init__.py
│   ├── config.py
│   ├── db.py
│   └── receiver.py
└── server.py
Download .txt
SYMBOL INDEX (23 symbols across 3 files)

FILE: client/sender.py
  class Sender (line 11) | class Sender():
    method get_ip (line 14) | def get_ip(self, ifname=ADSL_IFNAME):
    method adsl (line 24) | def adsl(self):
  function run (line 46) | def run():

FILE: server/db.py
  class RedisClient (line 6) | class RedisClient(object):
    method __init__ (line 7) | def __init__(self, host=REDIS_HOST, port=REDIS_PORT):
    method key (line 11) | def key(self, name):
    method set (line 14) | def set(self, name, proxy):
    method get (line 17) | def get(self, name):
    method count (line 20) | def count(self):
    method remove (line 23) | def remove(self, name):
    method keys (line 26) | def keys(self):
    method all (line 29) | def all(self):
    method random (line 34) | def random(self):
    method list (line 38) | def list(self):
    method first (line 43) | def first(self):

FILE: server/receiver.py
  class MainHandler (line 13) | class MainHandler(RequestHandler):
    method handle_proxy (line 17) | def handle_proxy(self, response):
    method test_proxies (line 30) | def test_proxies(self):
    method test_proxy (line 36) | def test_proxy(self, item):
    method post (line 49) | def post(self):
    method get (line 64) | def get(self, api):
  function run (line 86) | def run():
Condensed preview — 11 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8K chars).
[
  {
    "path": ".gitignore",
    "chars": 12,
    "preview": "/.idea\n*.pyc"
  },
  {
    "path": "README.md",
    "chars": 614,
    "preview": "# ADSL拨号服务器代理设置\n\n更优的选择:https://github.com/Python3WebSpider/AdslProxy\n\n## 服务端\n\n服务端即远程主机\n\n### 安装Python\n\nPython3版本\n\n\n### 安装"
  },
  {
    "path": "client/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "client/config.py",
    "chars": 227,
    "preview": "# 拨号间隔\nADSL_CYCLE = 100\n# ADSL命令\nADSL_BASH = 'adsl-stop;adsl-start'\n\n# 代理端口\nPROXY_PORT = 8888\n\n# 服务器地址\nSERVER_URL = 'htt"
  },
  {
    "path": "client/sender.py",
    "chars": 1458,
    "preview": "import re\nimport subprocess\n\nimport time\n\nfrom client.config import *\nimport requests\nfrom requests.exceptions import Co"
  },
  {
    "path": "client.py",
    "chars": 67,
    "preview": "from client.sender import run\n\nif __name__ == '__main__':\n    run()"
  },
  {
    "path": "server/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "server/config.py",
    "chars": 265,
    "preview": "# Redis数据库IP\nREDIS_HOST = 'localhost'\n# Redis数据库密码, 如无则填None\nREDIS_PASSWORD = 'foobared'\n# Redis数据库端口\nREDIS_PORT = 6379\n"
  },
  {
    "path": "server/db.py",
    "chars": 1518,
    "preview": "import redis\nimport random\nfrom server.config import *\n\n\nclass RedisClient(object):\n    def __init__(self, host=REDIS_HO"
  },
  {
    "path": "server/receiver.py",
    "chars": 3089,
    "preview": "import json\nfrom urllib.parse import urlencode, parse_qs, urlsplit\n\nimport tornado.ioloop\nimport tornado.web\nfrom tornad"
  },
  {
    "path": "server.py",
    "chars": 70,
    "preview": "from server.receiver import run\n\nif __name__ == '__main__':\n    run()\n"
  }
]

About this extraction

This page contains the full source code of the Germey/ADSLProxyPool GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 11 files (7.1 KB), approximately 2.1k tokens, and a symbol index with 23 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!