diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7578c70 --- /dev/null +++ b/.gitignore @@ -0,0 +1,205 @@ +# Created by .ignore support plugin (hsz.mobi) +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser +.idea +*.iml \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..32d8afc --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +* [域名检索](domain) +* [华为云安全组白名单配置](huawei) \ No newline at end of file diff --git a/config/config.py b/config/config.py new file mode 100644 index 0000000..c83c2ce --- /dev/null +++ b/config/config.py @@ -0,0 +1,32 @@ +import configparser +import logging +from logging.handlers import TimedRotatingFileHandler +import os +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +print(BASE_DIR) +cf = configparser.ConfigParser() +config_path=BASE_DIR+"/config.ini" +if not os.path.exists(config_path): + raise Exception("配置文件:%s不存在" % config_path) +cf.read(config_path,encoding='utf-8') +logFile = cf.get('file', 'logFile') +logger=logging.getLogger() +logger.setLevel(logging.INFO) +def init(): + log_format=logging.Formatter(fmt="%(asctime)s %(levelname)s : %(message)s",datefmt='%Y-%m-%d %H:%M:%S') + # 在控制台打印日志 + streamHandler = logging.StreamHandler() + streamHandler.setFormatter(log_format) + logger.addHandler(streamHandler) + + logpath=BASE_DIR+"/log/" + print(logpath) + if not os.path.exists(BASE_DIR+"/log/"): + os.mkdir(logpath) + + timedRotatingFileHandler=TimedRotatingFileHandler(filename=logpath+"all.log",when='H',interval=1,encoding='utf-8') + timedRotatingFileHandler.setFormatter(log_format) + + logger.addHandler(timedRotatingFileHandler) + + diff --git a/config/log.py b/config/log.py new file mode 100644 index 0000000..d9929a9 --- /dev/null +++ b/config/log.py @@ -0,0 +1,21 @@ +import time + +from config.config import init +from config.config import logger + +start = int(time.time()) +init() + +def getRunTimeInt(): + return (int(time.time()) - start) + +def getRunTime(): + return '程序已经执行%d秒' % (int(time.time()) - start) + + +def writeInfo(msg): + logger.info('%s\t(%s)' % (msg, getRunTime())) + + +def writeError(msg): + logger.error('%s\t(%s)' % (msg, getRunTime())) diff --git a/domain/.gitignore b/domain/.gitignore new file mode 100644 index 0000000..459d872 --- /dev/null +++ b/domain/.gitignore @@ -0,0 +1,2 @@ +# Created by .ignore support plugin (hsz.mobi) +chromedriver.exe \ No newline at end of file diff --git a/domain/alyundomain.py b/domain/alyundomain.py new file mode 100644 index 0000000..2a103ed --- /dev/null +++ b/domain/alyundomain.py @@ -0,0 +1,61 @@ +import time +import math +import requests +import json +from bs4 import BeautifulSoup + +# Create a new instance of the Firefox driver +from selenium.webdriver.chrome import webdriver + +driver = webdriver.WebDriver( + executable_path="D:\JetBrains\PycharmProjects\python_requirements_summary\chromedriver.exe") + +start_url = 'https://mi.aliyun.com/?spm=5176.8070854.az_625vhq.1.22242c4fIPqBfQ' + + +def getReq(domain): + try: + return requests.post('http://icp.chinaz.com/hklt.net', {"type": "host", "s": domain, "guid": "%24guid"}, + timeout=10) + except: + time.sleep(3) + return getReq(domain) + + +driver.get(start_url) +token = driver.execute_script('return window.umToken') +driver.quit() +pageSize = 50 +current_page = 1 +last_page = None +while last_page is None or current_page <= last_page: + session = requests.Session() + + url = 'https://domainapi.aliyun.com/onsale/search?fetchSearchTotal=true&token={0}¤tPage={1}&pageSize={2}&productType=2&minPrice=0&maxPrice=50&searchIntro=false&keywordAsPrefix=false&keywordAsSuffix=false&exKeywordAsPrefix=false&exKeywordAsSuffix=false&exKeywordAsPrefix2=false&exKeywordAsSuffix2=false'.format(token, current_page, pageSize) + res = session.get(url, headers={ + 'Referer': 'https://mi.aliyun.com/?spm=5176.8070854.az_625vhq.1.22242c4fIPqBfQ', + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36', + 'Sec-Fetch-Mode': 'no-cors' + }) + res_json = json.loads(res.content) + if 'data' in res_json: + if last_page is None and 'searchTotal' in res_json['data']: + last_page = min(100,math.ceil(res_json['data']['searchTotal'] / pageSize)) + if 'pageResult' in res_json['data'] and 'data' in res_json['data']['pageResult']: + for data in res_json['data']['pageResult']['data']: + domain = data['domainName'] + price = data['price'] + + res = getReq(domain) + + if res.status_code == 200: + res_html = BeautifulSoup(res.content, 'html.parser') + if res_html.select_one("p[class='tc col-red fz18 YaHei pb20']") is None: + print('{0}已备案,价格{1}'.format(domain, price)) + else: + print('{0}未备案'.format(domain)) + else: + print('{0}备案信息获取失败'.format(domain)) + else: + print(res_json) + current_page = current_page + 1 diff --git a/domain/checkDomain.py b/domain/checkDomain.py new file mode 100644 index 0000000..e87f104 --- /dev/null +++ b/domain/checkDomain.py @@ -0,0 +1,25 @@ +#域名注册检测 +import jsons as jsons +import requests + +headers = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36', + 'Referer': 'https://domain.oray.com/suffix/xyz.html' +} + +if __name__ == '__main__': + i = 1 + while True: + domain='%d.xyz' % i + response = requests.get('https://mcheck.oray.com/domain/check?domain[]=%s&record=1' % domain, headers=headers) + if response.status_code == 200: + content = response.content.decode(response.apparent_encoding) + if content.startswith('{') and content.endswith('}'): + content = jsons.loads(content) + if domain in content and 'avail' in content[domain] and content[domain]['avail']==1: + print('域名:%s未注册' % domain) + else: + print('域名:%s已注册' % domain) + else: + print('error') + i = i + 1 diff --git a/huawei/Test.py b/huawei/Test.py new file mode 100644 index 0000000..14d909c --- /dev/null +++ b/huawei/Test.py @@ -0,0 +1,41 @@ +# -*- coding:utf-8 -*- +# Copyright 2019 Huawei Technologies Co.,Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed +# under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +# CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +import json + +from openstack import connection + +from config.log import writeInfo +from config.config import cf + +conn = connection.Connection( + auth_url=cf.get('huaweicloud', 'auth_url'), + user_domain_id=cf.get('huaweicloud', 'userDomainId'), + project_id=cf.get('huaweicloud', 'projectId'), + username=cf.get('huaweicloud', 'username'), + password=cf.get('huaweicloud', 'password') +) + +if __name__ == '__main__': + security_group_id = cf.get('huaweicloud', 'security_group_id') + remote_ip_prefix=cf.get('huaweicloud', 'remote_ip_prefix') + writeInfo("放通IP:%s" % remote_ip_prefix) + rules = conn.vpcv1.security_group_rules(security_group_id=security_group_id) + for rule in rules: + if rule.description!='允许安全组内的弹性云服务器彼此通信': + conn.vpcv1.delete_security_group_rule(rule.id) + conn.vpcv1.create_security_group_rule(security_group_id=rule.security_group_id, direction=rule.direction, + description=rule.description, remote_ip_prefix=remote_ip_prefix, + port_range_max=rule.port_range_max, port_range_min=rule.port_range_min,protocol=rule.protocol) + writeInfo(rule) + writeInfo("成功刷新白名单") \ No newline at end of file diff --git a/requirement.txt b/requirement.txt new file mode 100644 index 0000000..f19a1d4 --- /dev/null +++ b/requirement.txt @@ -0,0 +1,14 @@ +certifi==2019.11.28 +chardet==3.0.4 +deprecation==2.0.7 +huaweicloud-sdk-python==1.0.21 +idna==2.8 +iso8601==0.1.12 +keystoneauth1==3.4.0 +packaging==20.1 +pbr==5.4.4 +pyparsing==2.4.6 +requests==2.22.0 +six==1.14.0 +stevedore==1.32.0 +urllib3==1.25.8