单线程多线程简介
单线程:同一时刻只有一个程序在运行
多线程:同一时刻多个程序在运行
单线程示例:
每个数字都是一秒后输出,输出完一个一秒后在输出下一个
import time
def test(i):
print(i)
for i in range(10):
test(i)
time.sleep(1)
多线程示例:
一瞬间输入10个0-9,同一时刻,输出多个值,执行多个进程
import time
import threading
def test():
for x in range(10):
print(x)
for i in range(10):
t=threading.Thread(target=test)
t.start()
单一网站——多线程网页扫描示例
模拟御剑后台扫描器原理
import sys
import os
import requests
import threading
import queue
import time
q=queue.Queue()
def scan():
while not q.empty():
dir=q.get()
urls=url+dir
urls=urls.replace('\n','')
while True: # 一直循环,直到访问站点成功
try:
code = requests.get(urls).status_code
# print(urls+"扫描中")
break
except requests.exceptions.ConnectionError:
time.sleep(0.5)
except requests.exceptions.ChunkedEncodingError:
time.sleep(0.5)
except:
time.sleep(0.5)
if code == 200 or code == 403:
print(urls + '|'+str(code))
def show():
print('ps:scan.py http://www.xiaodi8.com dir.txt 10')
print('\n')
print('脚本名 网站地址 字典文件 线程数')
if __name__ == '__main__':
path=os.path.dirname(os.path.realpath(__file__))
if len(sys.argv)<4:
show()
sys.exit()
url=sys.argv[1]
file=sys.argv[2]
num=sys.argv[3]
for dir in open(path+'/'+file):
q.put(dir)
for i in range(int(num)):
t=threading.Thread(target=scan)
t.start()
多网站、多线程——网页扫描示例
import sys
import os
import requests
import threading
import queue
import time
q=queue.Queue()
def scan():
while not q.empty():
urls=q.get()
urls=urls.replace('\n','')
while True: # 一直循环,直到访问站点成功
try:
code = requests.get(urls).status_code
break
except requests.exceptions.ConnectionError:
time.sleep(0.5)
except requests.exceptions.ChunkedEncodingError:
time.sleep(0.5)
except:
time.sleep(0.5)
if code == 200 or code == 403:
print(urls + '|' + str(code))
f = open('F:\学习python脚本\ok.txt', 'a+')
f.write(urls + '|' + str(code)+'\n')
f.close()
def show():
print('ps:scan.py url.txt dir.txt 10')
print('\n')
print('脚本名 网站文件 字典文件 线程数')
if __name__ == '__main__':
path=os.path.dirname(os.path.realpath(__file__))
if len(sys.argv)<4:
show()
sys.exit()
url=sys.argv[1]
file=sys.argv[2]
num=sys.argv[3]
for url in open(path + '/' +url):
for dir in open(path+'/'+file):
urls=url+dir
q.put(urls)
for i in range(int(num)):
t=threading.Thread(target=scan)
t.start()
将扫描结果保存在ok.txt中
单线程——端口扫描
扫描端口0-65535
import socket
ip='192.168.212.131'
for port in range(65536):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((ip,port))
print('{0} port {1} is open'.format(ip, port))
except Exception as err:
print('{0} port {1} is not open'.format(ip, port))
finally:
s.close()
多线程——端口扫描
import socket
import threading
import queue
q=queue.Queue()
def portscan():
while not q.empty():
port=q.get()
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((ip,port))
print('{0} port {1} is open'.format(ip,port))
except Exception as err:
print('{0} port {1} is not open'.format(ip, port))
finally:
s.close()
if __name__ == '__main__':
ip = '192.168.212.131'
for port in range(65536):
q.put(port)
for i in range(10):
t=threading.Thread(target=portscan)
t.start()
单线程——FTP登录
import ftplib
ip='192.168.212.131'
f=ftplib.FTP()
f.connect(ip,21)
f.login('administrator','123456')
print(f.getwelcome())