护网行动中的小需求,这次是py3的并行处理--速度就是生命。
# python3 并行处理小结
缘由: 公安部组织的护网行动期间,蓝方攻击小队会透露已经搞定了某个机器,比如是通过某个特定的漏洞getshell~虽然自己对资产大概是有数的,但还是觉得慌。于是需要我们能快速定位暴露的端口,确认识别的组件漏洞,也没啥难度,就是要“快”。 大概思路为:
- 该漏洞的利用特征,比如某个路径
- 遍历请求所有端口,如http get请求
- 从请求的状态以及特征判定
# python3 并行处理
python3 里面主要有下面两个库:
- multiprocessing
- threading
总结下这两个lib:
#基础例子
import multiprocessing as mp
import threading as td
def job(a,b):
print(f"a:{a},b:{b}")
t1 = td.Thread(target=job,args=(1,2))
p1 = mp.Process(target=job,args=(1,2))
t1.start()
p1.start()
t1.join()
p1.join()
上面是事后补了下基础的用法,这两个lib用法类似。我当时花了10分钟,参考xunfeng (opens new window)里面的vulscan的代码,怼了个。
#实现的例子
THREAD_COUNT = 10 # 进程数量
ips = []#ip列表
ports= [80]#端口列表
class vulscan():
def __init__(self, ip, port):
self.ip = ip
self.port = port
self.start()
def start(self):
try:
# url = 'http://secondary.meit.com.hk/axis/'#例子
url = "http://%s:%d/axis/"%(self.ip,self.port)
#print url
r = requests.get(url, timeout=float(2))
print("code:%d" % r.status_code)
r.encoding = 'utf-8'
res = (r.text)
if 'axis' in res.lower() and r.status_code!= 404:
print('ok')
except Exception as e:
pass
if __name__ =="__main__":
for ip in ips:
for port in ports:
while True:
if int(thread._count()) < THREAD_COUNT:
thread.start_new_thread(vulscan, (ip, port))
break
else:
time.sleep(1)