Browse Source

add docker images

liuyuqi-dellpc 2 years ago
parent
commit
b38b86c488

+ 27 - 0
.dockerignore

@@ -0,0 +1,27 @@
+**/__pycache__
+**/.venv
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/bin
+**/charts
+**/docker-compose*
+**/compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md

+ 25 - 0
Dockerfile

@@ -0,0 +1,25 @@
+# For more information, please refer to https://aka.ms/vscode-docker-python
+FROM python:3.8-slim
+
+EXPOSE 5002
+
+# Keeps Python from generating .pyc files in the container
+ENV PYTHONDONTWRITEBYTECODE=1
+
+# Turns off buffering for easier container logging
+ENV PYTHONUNBUFFERED=1
+
+# Install pip requirements
+COPY requirements.txt .
+RUN python -m pip install -r requirements.txt
+
+WORKDIR /app
+COPY . /app
+
+# Creates a non-root user with an explicit UID and adds permission to access the /app folder
+# For more info, please refer to https://aka.ms/vscode-docker-python-configure-containers
+RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
+USER appuser
+
+# During debugging, this entry point will be overridden. For more information, please refer to https://aka.ms/vscode-docker-python-debug
+CMD ["gunicorn", "--bind", "0.0.0.0:5002", "main:app"]

+ 29 - 0
README.md

@@ -7,9 +7,30 @@
 
 批量生成100个邮箱和密码:
 ```
+git clone xx.git
+cd \OutlookMutiRegister
+pip install -r requirements.txt
 python generarte_email.py -n 100
 ```
 
+or:
+```
+pip install outlook_muti_register
+generate_email -m 100
+```
+
+or:
+```
+python setup.py install
+generate_email -m 100
+```
+
+or:
+```
+docker run -d jianboy/outlook_muti_register:latest
+
+```
+
 批量注册outlook邮箱
 1. 获取代理ip
 2. 使用selenium点击操作
@@ -18,6 +39,14 @@ python generarte_email.py -n 100
 
 ## Develop
 
+project struct:
+```
+
+```
+
+
+docker images:
 ```
+docker build .
 
 ```

+ 14 - 0
docker-compose.debug.yml

@@ -0,0 +1,14 @@
+version: '3.4'
+
+services:
+  outlookmutiregister:
+    image: outlookmutiregister
+    build:
+      context: .
+      dockerfile: ./Dockerfile
+    command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 -m flask run --no-debugger --no-reload --host 0.0.0.0 --port 5002"]
+    ports:
+      - 5002:5002
+      - 5678:5678
+    environment:
+      - FLASK_APP=main.py

+ 10 - 0
docker-compose.yml

@@ -0,0 +1,10 @@
+version: '3.4'
+
+services:
+  outlookmutiregister:
+    image: outlookmutiregister
+    build:
+      context: .
+      dockerfile: ./Dockerfile
+    ports:
+      - 5002:5002

BIN
image.png


+ 13 - 2
outlook_muti_register/api.py

@@ -13,13 +13,24 @@ phone_host=r""
 get_phone=r"/getphone"
 get_message=r"/getmessage"
 
-# mail 接口
+# 验证 mail 接口
 mail_host=r""
 get_mail=r"/getmail"
 get_mail_content=r"/getmailcontent"
 
 # proxy
-proxy_host = r"https://ip.ihuan.me/today"
+proxy_host_ihuan = r"https://ip.ihuan.me"
 
+# for outlook
+live_host='https://signup.live.com/signup'
+
+# for 163mail
+mail_163_host='https://mail.163.com/'
+
+# for qqmail
+qq_host='https://mail.qq.com/cgi-bin/loginpage'
+
+# for gmail
+gmail_host='https://accounts.google.com/signup/v2/webcreateaccount?hl=zh-CN&flowName=GlifWebSignIn&flowEntry=SignUp'
 
 

+ 42 - 2
outlook_muti_register/outlook_register.py

@@ -9,6 +9,8 @@
 
 from outlook_muti_register.register import Register
 from . import generate_email
+import os,sys,re,time,logging,random,requests,threading,queue,datetime
+from selenium import webdriver
 
 class OutlookRegister(Register):
     '''outlook register'''
@@ -16,10 +18,44 @@ class OutlookRegister(Register):
     def __init__(self):
         '''init'''
         super(OutlookRegister, self).__init__()
-    
+        self.headers={
+            'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
+            'accept-encoding': 'deflate',
+            'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7',
+            'cache-control': 'max-age=0',
+            'dnt': '1',
+            'sec-fetch-dest': 'document',
+            'sec-fetch-mode': 'navigate',
+            'sec-fetch-site': 'none',
+            'sec-fetch-user': '?1',
+            'upgrade-insecure-requests': '1',
+            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
+        }
+        self.code_url = 'http://apigateway.jianjiaoshuju.com/api/v_1/yzmCustomized.html'
+        self.code_headers = {
+            'appCode': 'X',
+            'appKey': 'X',
+            'appSecret': 'X'
+        }
     def run(self):
         self.logger.info('outlook register start...')
         # get proxy ip list
+        consecutive_fail_number = 0
+        try:
+            for tp, ip_port in self.get_ip_list():
+                if datetime.now().minute == 10 or consecutive_fail_number > 10:
+                    break
+                print('Proxy: {}://{}'.format(tp, ip_port))
+                driver = create_driver(tp, ip_port)
+                register_success = start_register(driver)
+                driver.close()
+                if register_success:
+                    consecutive_fail_number = 0
+                if not register_success:
+                    consecutive_fail_number += 1
+        except Exception as e:
+            print(e)
+        schedule.every().minute.at(':10').do(run_driver)
 
         # generate account and pwd (read from file)
         generate_email.generate_email()
@@ -40,4 +76,8 @@ class OutlookRegister(Register):
 
     def register_email(self):
         '''register email'''
-        pass
+        pass
+
+if __name__=='__main__':
+    outlook_register = OutlookRegister()
+    outlook_register.run()

+ 118 - 0
outlook_muti_register/proxy/ihuan_proxy.py

@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+'''
+@Contact :   liuyuqi.gov@msn.cn
+@Time    :   2023/03/26 16:50:34
+@License :   Copyright © 2017-2022 liuyuqi. All Rights Reserved.
+@Desc    :   ihuan proxy
+'''
+
+from . import Proxy
+import requests
+import time,datetime
+import re,os,sys,re
+from outlook_muti_register import api
+import logging
+
+class IhuaProxy(Proxy):
+    
+    def __init__(self, debug=False):
+        self.debug = debug
+        self.logger = logging.getLogger('outlook_muti_register')
+        if debug:
+            self.logger.setLevel(logging.DEBUG)
+        else:
+            self.logger.setLevel(logging.INFO)
+        self.logger.info('init ihuan proxy')
+        # todo
+        self.headers = {}
+
+    def set_global_chek_timeout(self, ip_list,  max_bad_number=None):
+        if not ip_list:
+            print(ip_list)
+            raise Exception('ip_list is None')
+        bad_number = 0
+        success_number = 0
+        if max_bad_number is None:
+            max_bad_number = len(ip_list)/2
+        for ip, port, tp in ip_list:
+            tp = tp.lower()
+            try:
+                ip_url = '{}:{}'.format(ip, port)
+                requests.get(url=url, headers=headers, proxies={
+                            tp: '{}://'.format(tp)+ip_url}, timeout=check_timeout)
+                success_number += 1
+            except Exception:
+                bad_number += 1
+            print('try to set timeout={} \t success:{} \t fail:{}'.format(
+                check_timeout, success_number, bad_number))
+
+            if bad_number > max_bad_number:
+                check_timeout += 1.5
+                if check_timeout >= 10:
+                    raise TimeoutError
+                return self.set_global_chek_timeout(ip_list, max_bad_number)
+
+            if success_number > len(ip_list) - max_bad_number:
+                d = datetime.now()
+                with open('check_timeout.txt', 'w') as f:
+                    f.write('{} {} {} {} {}'.format(
+                        d.year, d.month, d.day, d.hour, check_timeout))
+                return check_timeout
+
+
+    def get_ip_list(self):
+        '''get ip list from ihuan
+        Returns: ip_list
+        '''
+        d = datetime.now()
+        year = d.year
+        month = d.month
+        day = d.day
+        hour = d.hour
+        req_url = api.proxy_host_ihuan + '/today/{}/{:02d}/{{:02d}}/{{:02d}}.html'.format(
+            year,
+            month
+        )
+        ip_list = []
+        while True:
+            try:
+                cur_url = req_url.format(day, hour)
+                self.logger.info('try to get ip list page: ' + cur_url)
+                response = requests.get(cur_url, headers=self.headers)
+                ip_list = re.findall(
+                    r'<br>([\d\.]*?):(\d*)@(.*?)#',
+                    response.text,
+                    re.S
+                )
+                if ip_list:
+                    break
+                hour -= 1
+            except Exception as ex:
+                print(ex)
+                time.sleep(2)
+                hour -= 1
+                if hour == 0:
+                    raise Exception('get ip timeout')
+        self.logger.info('get ip list page success')
+        if os.path.exists('check_timeout.txt'):
+            l = []
+            with open('check_timeout.txt', 'r') as f:
+                f_read = f.read()
+                if f_read:
+                    l = list(map(float, f_read.split(' ')))
+            if l and [year, month, day, hour] == l[:-1]:
+                check_timeout = l[-1]
+            else:
+                self.set_global_chek_timeout(ip_list[-5:])
+        else:
+            self.set_global_chek_timeout(ip_list[-5:])
+        used_ip = ''
+        if os.path.exists('used_ip.txt'):
+            with open('used_ip.txt', 'r') as f:
+                used_ip = f.read()
+        return [[tp, '{}:{}'.format(ip, port)] for ip, port, tp in ip_list if ip not in used_ip]
+
+if __name__=='__main__':
+    ihuan_proxy = IhuaProxy()
+    print(ihuan_proxy.get_ip_list())

+ 4 - 0
outlook_muti_register/proxy/proxy.py

@@ -0,0 +1,4 @@
+class Proxy(object):
+    
+    def __init__(self):
+        pass

+ 0 - 85
spider.py

@@ -169,91 +169,6 @@ def get_code(img_data):
     return code
 
 
-def set_global_chek_timeout(ip_list,  max_bad_number=None):
-    global check_timeout
-    if not ip_list:
-        print(ip_list)
-        raise Exception('ip_list is None')
-    bad_number = 0
-    success_number = 0
-    if max_bad_number is None:
-        max_bad_number = len(ip_list)/2
-    for ip, port, tp in ip_list:
-        tp = tp.lower()
-        try:
-            ip_url = '{}:{}'.format(ip, port)
-            requests.get(url=url, headers=headers, proxies={
-                         tp: '{}://'.format(tp)+ip_url}, timeout=check_timeout)
-            success_number += 1
-        except Exception:
-            bad_number += 1
-        print('try to set timeout={} \t success:{} \t fail:{}'.format(
-            check_timeout, success_number, bad_number))
-
-        if bad_number > max_bad_number:
-            check_timeout += 1.5
-            if check_timeout >= 10:
-                raise TimeoutError
-            return set_global_chek_timeout(ip_list, max_bad_number)
-
-        if success_number > len(ip_list) - max_bad_number:
-            d = datetime.now()
-            with open('check_timeout.txt', 'w') as f:
-                f.write('{} {} {} {} {}'.format(
-                    d.year, d.month, d.day, d.hour, check_timeout))
-            return check_timeout
-
-
-def get_ip_list():
-    global check_timeout
-    d = datetime.now()
-    year = d.year
-    month = d.month
-    day = d.day
-    hour = d.hour
-    req_url = 'https://ip.ihuan.me/today/{}/{:02d}/{{:02d}}/{{:02d}}.html'.format(
-        year,
-        month
-    )
-    ip_list = []
-    while True:
-        try:
-            cur_url = req_url.format(day, hour)
-            print('try to get ip list page: ' + cur_url)
-            response = requests.get(cur_url, headers=headers)
-            ip_list = re.findall(
-                r'<br>([\d\.]*?):(\d*)@(.*?)#',
-                response.text,
-                re.S
-            )
-            if ip_list:
-                break
-            hour -= 1
-        except Exception as ex:
-            print(ex)
-            time.sleep(2)
-            hour -= 1
-            if hour == 0:
-                raise Exception('get ip timeout')
-    print('get ip list page success')
-    if os.path.exists('check_timeout.txt'):
-        l = []
-        with open('check_timeout.txt', 'r') as f:
-            f_read = f.read()
-            if f_read:
-                l = list(map(float, f_read.split(' ')))
-        if l and [year, month, day, hour] == l[:-1]:
-            check_timeout = l[-1]
-        else:
-            set_global_chek_timeout(ip_list[-5:])
-    else:
-        set_global_chek_timeout(ip_list[-5:])
-    used_ip = ''
-    if os.path.exists('used_ip.txt'):
-        with open('used_ip.txt', 'r') as f:
-            used_ip = f.read()
-    return [[tp, '{}:{}'.format(ip, port)] for ip, port, tp in ip_list if ip not in used_ip]
-
 
 def register_email(driver, email, password):
     driver.get(url)