python——单线程与多线程

166 阅读2分钟

单线程多线程简介

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

单线程示例:

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

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

在这里插入图片描述

更多web安全工具与存在漏洞的网站搭建源码,收集整理在知识星球。
在这里插入图片描述