From f5adb01450ed400a34f70869648af754028d7ff3 Mon Sep 17 00:00:00 2001 From: Zline Date: Fri, 14 Apr 2017 09:34:16 +0800 Subject: [PATCH 01/14] Create scan_web_banner.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 扫描web并获取版本 --- scan_web_banner.py | 112 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 scan_web_banner.py diff --git a/scan_web_banner.py b/scan_web_banner.py new file mode 100644 index 0000000..7bb0ea5 --- /dev/null +++ b/scan_web_banner.py @@ -0,0 +1,112 @@ +#/usr/bin/env python +#-*-coding=utf-8-*- + +# __author__ = 'Zline' + +import requests +import re +from threading import Thread,Lock +import time +import sys +import chardet +import netaddr +import struct +import socket + +lock = Lock() + +def ip2int(addr): + return struct.unpack("!I", socket.inet_aton(addr))[0] +def int2ip(addr): + return socket.inet_ntoa(struct.pack("!I", addr)) +def int_dec(pagehtml): + + charset = None + if pagehtml != '': + # print 'use charset dect' + enc = chardet.detect(pagehtml) + # print 'enc= ', enc + if enc['encoding'] and enc['confidence'] > 0.9: + charset = enc['encoding'] + + if charset == None: + charset_re = re.compile("((^|;)\s*charset\s*=)([^\"']*)", re.M) + charset=charset_re.search(pagehtml[:1000]) + charset=charset and charset.group(3) or None + + # test charset + try: + if charset: + unicode('test',charset,errors='replace') + except Exception,e: + print 'Exception',e + charset = None + # print 'charset=', charset + return charset + + +def http_banner(url): + ip=url + try: + url=requests.get(url,timeout=2) + + body = url.content + + charset = None + if body != '': + charset = int_dec(body) + + if charset == None or charset == 'ascii': + charset = 'ISO-8859-1' + + if charset and charset != 'ascii' and charset != 'unicode': + try: + body = unicode(body,charset,errors='replace') + except Exception, e: + body = '' + Struts=url.status_code + Server=url.headers['server'][0:13] + if Struts==200 or Struts==403 or Struts==401: + title=re.findall(r"(.*)<\/title>",body) + if len(title): + title = title[0].strip() + else: + title = '' + lock.acquire() + print ('%s\t%d\t%-10s\t%s'%(ip.lstrip('http://'),Struts,Server,title)) + lock.release() + except (requests.HTTPError,requests.RequestException,AttributeError,KeyError),e: + pass + + + +if __name__ == '__main__': + if len(sys.argv) >= 2: + ips = sys.argv[1] + else: + print 'usage: python http_banner.py 192.168.1./24 ' + print 'usage: python http_banner.py 192.168.1.1-192.168.1.254 ' + print 'usage: python http_banner.py 192.168.1./24 8080' + print 'usage: python http_banner.py 192.168.1.1-192.168.1.254 8080' + sys.exit() + port = '80' + if len(sys.argv) == 3: + port = sys.argv[2] + + if '-' in ips: + start, end = ips.split('-') + startlong = ip2int(start) + endlong = ip2int(end) + ips = netaddr.IPRange(start,end) + for ip in list(ips): + url='http://%s:%s'%(ip,port) + t = Thread(target=http_banner,args=(url,)) + t.daemon=False + t.start() + elif '/' in ips: + ips = netaddr.IPNetwork(ips) + for ip in list(ips): + url='http://%s:%s'%(ip,port) + t = Thread(target=http_banner,args=(url,)) + t.daemon=False + t.start() From 09c7d1d5bc52a5a195094247ba27ffb32e246aaa Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Fri, 14 Apr 2017 09:35:29 +0800 Subject: [PATCH 02/14] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 2fadb70..eb0cd22 100644 --- a/README.md +++ b/README.md @@ -30,3 +30,6 @@ * 扫描服务器生成Excel报表:  [*ssh_excel.py*](https://github.com/honglongwei/python-scripts/blob/master/ssh_excel.py) + +* Web扫描: +  [*scan_web_banner.py*](https://github.com/honglongwei/python-scripts/blob/master/scan_web_banner.py) From 141dd961b1b48f42dc790287a5a7f0395651b4b3 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Fri, 14 Apr 2017 09:37:20 +0800 Subject: [PATCH 03/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eb0cd22..d8c0a87 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -###运维通用python脚本框架 +### 运维通用python脚本框架 * 日常运维: From cf9f41df6eda91ed388ccc75665c7dc74eaab355 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Wed, 31 May 2017 11:22:30 +0800 Subject: [PATCH 04/14] Create dodb.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit python操作db的原生sql --- dodb.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 dodb.py diff --git a/dodb.py b/dodb.py new file mode 100644 index 0000000..eaae815 --- /dev/null +++ b/dodb.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +#_*_ coding:utf-8 _*_ + +import MySQLdb + + +with open('/var/logs/install.log') as f: + a = f.read().strip().split('\n') + hostl = [] + for i in a: + b = i.split('\t') + if b[3] == 'stop': + hostl.append(b[1]) + else: + pass + for host in list(set(hostl)): + conn= MySQLdb.connect( + host='localhost', + port = 3306, + user='root', + passwd='111111', + db ='pj_install', + ) + try: + #select + sql = "select * from automsg where HostName='{0}'".format(host) + cur = conn.cursor() + cur.execute(sql) + ret = cur.fetchone() + + #update + update_sql = "update installretmsg set status=2, msg=u'安装成功!' where id={0}".format(int(ret[0])) + cur.execute(update_sql) + + cur.close() + conn.commit() + conn.close() + except: + pass From b800d1bef53a19bb73201b9d3823c01b86e890cd Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Wed, 31 May 2017 11:24:31 +0800 Subject: [PATCH 05/14] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d8c0a87..20e727f 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,9 @@ * 日常运维: [*opsmod.py*](https://github.com/honglongwei/python-scripts/blob/master/opsmod.py) + +* python操作mysql的原生sql: + [*dodb.py*](https://github.com/honglongwei/python-scripts/blob/master/dodb.py) * zabbix修改可见名称API: [*zabbix_update_pj-api*](https://github.com/honglongwei/python-scripts/blob/master/zabbix_update_pj-api.py) From 98c4dabc045482406184b31cb00eb37896d99fd2 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Wed, 5 Jul 2017 12:47:40 +0800 Subject: [PATCH 06/14] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20e727f..589395a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [*dodb.py*](https://github.com/honglongwei/python-scripts/blob/master/dodb.py) * zabbix修改可见名称API: - [*zabbix_update_pj-api*](https://github.com/honglongwei/python-scripts/blob/master/zabbix_update_pj-api.py) + [*zabbix_update_pj-api.py*](https://github.com/honglongwei/python-scripts/blob/master/zabbix_update_pj-api.py) * zabbix通用API: [*zabbix-api.py*](https://github.com/honglongwei/python-scripts/blob/master/zabbix-api.py) From d829c91f23ad540ff3cbdd77fec3fc3c6133a50c Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Tue, 15 Aug 2017 20:14:31 +0800 Subject: [PATCH 07/14] Create unixtimeformat.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unix时间戳转换 --- unixtimeformat.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 unixtimeformat.py diff --git a/unixtimeformat.py b/unixtimeformat.py new file mode 100644 index 0000000..fd5cec4 --- /dev/null +++ b/unixtimeformat.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import time + +def timestamp_datetime(value): + format = '%Y-%m-%d %H:%M:%S' + # value为传入的值为时间戳(整形),如:1332888820 + value = time.localtime(value) + ## 经过localtime转换后变成 + ## time.struct_time(tm_year=2012, tm_mon=3, tm_mday=28, tm_hour=6, tm_min=53, tm_sec=40, tm_wday=2, tm_yday=88, tm_isdst=0) + # 最后再经过strftime函数转换为正常日期格式。 + dt = time.strftime(format, value) + return dt + +def datetime_timestamp(dt): + #dt为字符串 + #中间过程,一般都需要将字符串转化为时间数组 + time.strptime(dt, '%Y-%m-%d %H:%M:%S') + ## time.struct_time(tm_year=2012, tm_mon=3, tm_mday=28, tm_hour=6, tm_min=53, tm_sec=40, tm_wday=2, tm_yday=88, tm_isdst=-1) + #将"2012-03-28 06:53:40"转化为时间戳 + s = time.mktime(time.strptime(dt, '%Y-%m-%d %H:%M:%S')) + return int(s) + +if __name__ == '__main__': + d = datetime_timestamp('2015-07-28 21:53:40') + print d + s = timestamp_datetime(1352889820) + print s From 560788c3d95321c40b62d928e4e9ac10b7fd89ed Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Tue, 15 Aug 2017 20:15:06 +0800 Subject: [PATCH 08/14] Rename unixtimeformat.py to unix_time_format.py --- unixtimeformat.py => unix_time_format.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename unixtimeformat.py => unix_time_format.py (100%) diff --git a/unixtimeformat.py b/unix_time_format.py similarity index 100% rename from unixtimeformat.py rename to unix_time_format.py From ce6859dadb4d22d34d55b3b75b40aa18125ff9a0 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Tue, 15 Aug 2017 20:16:51 +0800 Subject: [PATCH 09/14] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 589395a..b6d8aed 100644 --- a/README.md +++ b/README.md @@ -36,3 +36,7 @@ * Web扫描:  [*scan_web_banner.py*](https://github.com/honglongwei/python-scripts/blob/master/scan_web_banner.py) + + * Unix时间戳转换: +  [*unix_time_format.py*](https://github.com/honglongwei/python-scripts/blob/master/unix_time_format.py) + From 8e184ee6ae0d90ee19bdc8ce6c3cbd525c217be6 Mon Sep 17 00:00:00 2001 From: tes <tes@163.com> Date: Thu, 11 Jan 2018 20:11:14 +0800 Subject: [PATCH 10/14] ldap --- README.md | 5 +++- ldap.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 ldap.py diff --git a/README.md b/README.md index b6d8aed..95349ad 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,9 @@ * Web扫描:  [*scan_web_banner.py*](https://github.com/honglongwei/python-scripts/blob/master/scan_web_banner.py) - * Unix时间戳转换: +* Unix时间戳转换:  [*unix_time_format.py*](https://github.com/honglongwei/python-scripts/blob/master/unix_time_format.py) +* LDAP认证: +  [*ldap.py*](https://github.com/honglongwei/python-scripts/blob/master/ldap.py) + diff --git a/ldap.py b/ldap.py new file mode 100644 index 0000000..c643aa7 --- /dev/null +++ b/ldap.py @@ -0,0 +1,87 @@ +#!usr/bin/env python +#coding: utf-8 + +import os +import sys +import ldap + +def login_ldap(username, password): + try: + # print("开始执行") + Server = "ldap://127.0.0.1:389" + baseDN = "dc=baidu,dc=com" + searchScope = ldap.SCOPE_SUBTREE + # 设置过滤属性,这里只显示cn=test的信息 + searchFilter = "sAMAccountName=" + username + # 为用户名加上域名 + username = 'baidu\\' + username + + + # None表示搜索所有属性,['cn']表示只搜索cn属性 + retrieveAttributes = None + + conn = ldap.initialize(Server) + #非常重要 + conn.set_option(ldap.OPT_REFERRALS, 0) + conn.protocol_version = ldap.VERSION3 + # 这里用户名是域账号的全名例如domain/name + #print conn.simple_bind_s(username, password) + conn.simple_bind_s(username, password) + # print 'ldap connect successfully' + + + #调用search方法返回结果id + ldap_result_id = conn.search(baseDN, searchScope, searchFilter, retrieveAttributes) + result_set = [] + #print ldap_result_id + + #print("****************") + while 1: + result_type, result_data = conn.result(ldap_result_id, 0) + if(result_data == []): + break + else: + if result_type == ldap.RES_SEARCH_ENTRY: + result_set.append(result_data) + + #print result_set + Name,Attrs = result_set[0][0] + if hasattr(Attrs, 'has_key') and Attrs.has_key('name'): + ret = {} + #distinguishedName = Attrs['mail'][0] + #distinguishedName = Attrs['name'][0] + #distinguishedName = Attrs['displayName'][0] + #distinguishedName = Attrs['mail'][0] + #distinguishedName = Attrs['memberOf'][0] + #distinguishedName = Attrs['mailNickname'][0] + #distinguishedName = Attrs['sAMAccountName'][0] + #distinguishedName = Attrs['distinguishedName'][0] + #distinguishedName = Attrs['title'][0] + #distinguishedName = Attrs['department'][0] + #distinguishedName = Attrs['manager'][0] + # print "Login Info for user : %s" % distinguishedName + + ret['mail'] = Attrs['mail'][0] + ret['username'] = Attrs['name'][0] + ret['nickname'] = Attrs['displayName'][0] + ret['code'] = 200010 + # print Attrs['memberOf'][0] + #print Attrs['sAMAccountName'][0] + + # print Attrs['title'][0] + # print Attrs['department'][0] + + + + return ret + + else: + return {'code': 400011, 'msg': u'认证失败'} + except ldap.LDAPError, e: + return {'code': 400012, 'msg': u'认证失败'} + +if __name__ == "__main__": + username = "" # ldap中用户名 + password = "" # ldap中密码 + + print login_ldap(username, password) From b9dcee6b0427e21b13d6bb969985493c702203f6 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Fri, 9 Mar 2018 10:28:41 +0800 Subject: [PATCH 11/14] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 95349ad..30bfcb1 100644 --- a/README.md +++ b/README.md @@ -43,3 +43,5 @@ * LDAP认证:  [*ldap.py*](https://github.com/honglongwei/python-scripts/blob/master/ldap.py) +* 获取本机公网出口IP: +  [*get_local_wip.py*](https://github.com/honglongwei/python-scripts/blob/master/get_local_wip.py) From 12db3bfa68c1c0ad8843d726179e900630154328 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Fri, 9 Mar 2018 10:31:02 +0800 Subject: [PATCH 12/14] Create get_local_wip.py --- get_local_wip.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 get_local_wip.py diff --git a/get_local_wip.py b/get_local_wip.py new file mode 100644 index 0000000..bd99822 --- /dev/null +++ b/get_local_wip.py @@ -0,0 +1,28 @@ +#encoding: utf-8 +import requests +from bs4 import BeautifulSoup + + +# 获取公网出口IP +def get_out_ip(url): + r = requests.get(url) + txt = r.text + ip = txt[txt.find("[") + 1: txt.find("]")] + print('ip:' + ip) + return ip + + +def get_real_url(url=r'http://www.ip138.com/'): + r = requests.get(url) + txt = r.text + soup = BeautifulSoup(txt,"html.parser").iframe + return soup["src"] + + +if __name__ == '__main__': + ip = get_out_ip(get_real_url()) + with open("result.log", "a") as f: + print >>f, ip + +#pip install pyinstaller +#pyinstaller -F get_local_wip.py >> dist/get_local_wip.exe From 7e965f9bfa56de491184248e17f373caa27c07e3 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Tue, 20 Mar 2018 14:22:35 +0800 Subject: [PATCH 13/14] Update get_local_wip.py --- get_local_wip.py | 61 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/get_local_wip.py b/get_local_wip.py index bd99822..7efb10d 100644 --- a/get_local_wip.py +++ b/get_local_wip.py @@ -1,16 +1,26 @@ -#encoding: utf-8 +#coding:utf-8 + +import os +import Queue +import codecs import requests +import threading, subprocess +from time import ctime, sleep, time from bs4 import BeautifulSoup - -# 获取公网出口IP def get_out_ip(url): - r = requests.get(url) - txt = r.text - ip = txt[txt.find("[") + 1: txt.find("]")] - print('ip:' + ip) - return ip + req = requests.get(url) + if req.encoding == 'ISO-8859-1': + encodings = requests.utils.get_encodings_from_content(req.text) + if encodings: + encoding = encodings[0] + else: + encoding = req.apparent_encoding + global encode_content + encode_content = req.content.decode(encoding, 'replace') + + return encode_content[encode_content.find("<center>") + 1: encode_content.find("</center>")].replace("center>", "") def get_real_url(url=r'http://www.ip138.com/'): r = requests.get(url) @@ -18,11 +28,42 @@ def get_real_url(url=r'http://www.ip138.com/'): soup = BeautifulSoup(txt,"html.parser").iframe return soup["src"] +class ThreadUrl(threading.Thread): + def __init__(self,queue): + threading.Thread.__init__(self) + self.queue = queue + + def run(self): + while True: + host = self.queue.get() + ret = subprocess.Popen('ping -n 600 '+ host, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + with open('iflytek/{0}.log'.format(host), 'a') as f: + print >>f, ret.stdout.read() + self.queue.task_done() + +def startPing(): + for i in range(100): + t=ThreadUrl(queue) + t.setDaemon(True) + t.start() + for host in ['140.143.0.175', '39.107.78.159', '120.92.31.91', '117.121.21.146', '117.121.21.146', '42.62.116.34', '42.62.42.10', '121.201.83.170', '59.107.24.5']: + queue.put(host) + queue.join() if __name__ == '__main__': + print '*'*40 + print '*' + u' 欢迎使用网络质量检测工具 ' + '*' + print '*' + ' ' + '*' + print '*' + u' 程序运行过程中,请不要关闭程序窗口! ' + '*' + print '*'*40 + if not os.path.exists('iflytek'): + os.makedirs('iflytek') ip = get_out_ip(get_real_url()) - with open("result.log", "a") as f: - print >>f, ip + f = codecs.open('iflytek/ISP.log', 'w', 'utf-8') + f.write(ip) + queue = Queue.Queue() + ret = startPing() + #pip install pyinstaller #pyinstaller -F get_local_wip.py >> dist/get_local_wip.exe From affcea69d7edd539e81f2ab0bde429986a047041 Mon Sep 17 00:00:00 2001 From: Zline <honglongwei@users.noreply.github.com> Date: Wed, 28 Mar 2018 10:00:22 +0800 Subject: [PATCH 14/14] Update ldap.py --- ldap.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ldap.py b/ldap.py index c643aa7..c74e892 100644 --- a/ldap.py +++ b/ldap.py @@ -8,7 +8,7 @@ def login_ldap(username, password): try: # print("开始执行") - Server = "ldap://127.0.0.1:389" + Server = "ldap://8.8.8.8:389" baseDN = "dc=baidu,dc=com" searchScope = ldap.SCOPE_SUBTREE # 设置过滤属性,这里只显示cn=test的信息 @@ -64,6 +64,9 @@ def login_ldap(username, password): ret['mail'] = Attrs['mail'][0] ret['username'] = Attrs['name'][0] ret['nickname'] = Attrs['displayName'][0] + ret['sAMAccountName'] = Attrs['sAMAccountName'][0] + ret['memberOf'] = Attrs['memberOf'][0] + ret['distinguishedName'] = Attrs['distinguishedName'][0] ret['code'] = 200010 # print Attrs['memberOf'][0] #print Attrs['sAMAccountName'][0] @@ -84,4 +87,4 @@ def login_ldap(username, password): username = "" # ldap中用户名 password = "" # ldap中密码 - print login_ldap(username, password) + print login_ldap(username, password)