0
点赞
收藏
分享

微信扫一扫

python——单线程与多线程


单线程多线程简介

单线程:同一时刻只有一个程序在运行
多线程:同一时刻多个程序在运行

单线程示例:

每个数字都是一秒后输出,输出完一个一秒后在输出下一个

import time

def test(i):
print(i)
for i in range(10):
test(i)
time.sleep(1)

python——单线程与多线程_单线程

多线程示例:

一瞬间输入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()

python——单线程与多线程_单线程_02

单一网站——多线程网页扫描示例

模拟御剑后台扫描器原理

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()

python——单线程与多线程_单线程_03

多网站、多线程——网页扫描示例

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()

python——单线程与多线程_多线程_04


将扫描结果保存在ok.txt中

python——单线程与多线程_单线程_05

单线程——端口扫描

扫描端口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()

python——单线程与多线程_多线程_06

多线程——端口扫描

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()

python——单线程与多线程_端口扫描_07

单线程——FTP登录

import ftplib

ip='192.168.212.131'
f=ftplib.FTP()
f.connect(ip,21)
f.login('administrator','123456')
print(f.getwelcome())

python——单线程与多线程_多线程_08


举报

相关推荐

0 条评论