栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python目录端口扫描器(多线程)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python目录端口扫描器(多线程)

提示:原创 请勿转载

python扫描端口目录(多线程)
  • 前言
  • 一、构思
  • 二、使用步骤
    • 1.引入库
    • 2.实现函数
      • 这里先把线程要调用的函数写出来,方便后面使用多线程
      • 开启线程池
      • 通过socket获取服务器ip
      • 多线程的端口扫描使用
  • 总结


前言

提示:学习代码,写的不对请纠正,见谅:
python 简单的扫描器,实现了扫描目标网址的ip,端口,识别中间件,目录
主要用到了 python的 requests、socket 、threading模块
此博客只会写主要的实现函数和简单的对代码进行解释,完全的代码在github上
源代码github地址:https://github.com/XYFAE/pythonscanner


一、构思

先要构思好要实现的功能和要用到的模块
比如扫描端口要用到的socket模块,扫描目录要用到的requests模块

二、使用步骤 1.引入库

代码如下(示例):

import requests #爬虫模块
import sys
import socket #网络连接模块
import threading  #线程模块
from tqdm import tqdm  #进度条
import time  # 可以控制扫描速度
2.实现函数 这里先把线程要调用的函数写出来,方便后面使用多线程

代码如下(示例):

def portscanner(host, port):   #扫描端口
    global openNum  #global python的一个用法,设置全局变量
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #设置socket初始化
        s.connect((host, port))
        lock.acquire()  #修改前加一把锁
        openNum += 1
        list1.append("{} open".format(port))
        lock.release()   #修改完释放锁
        s.close()
    except:
        pass

def dirscanner(url,i):   #扫描目录
    global opendir  
    #判断url最后一个字符是否为/ 没有则加上
    try:
        if url[-1] != '/':
            url = url + '/'
        newurl = url + i.strip('n')
        
        r = requests.get(newurl, headers=headers)
        if r.status_code == 200:
            lock.acquire()
            list2.append("{} open".format(newurl))
            opendir += 1
            lock.release()
    except:
        print("GG")
        pass
开启线程池
lock = threading.Lock()                     # 确保 多个线程在共享资源的时候不会出现脏数据
openNum = 0                                   # 端口开放数量统计
opendir = 0                                   # 目录开放数量统计
threads = []                                  # 线程池
通过socket获取服务器ip
print(colors.OKGREEN+"Status_code is: 200"+colors.ENDC)
r1 = requests.get(url, headers=headers)
ip = socket.gethostbyname(url.replace("http://","").replace("https://","").replace("/",""))
print('IP:', ip)
多线程的端口扫描使用

目录扫描同理,注意打开文件和遍历文件的功能在实现函数(postscanner)外

for port in tqdm(ports,colour='blue'):
    t1 = threading.Thread(target=portscanner, args=(ip, port))
    threads.append(t1)
    t1.start()
    # time.sleep(0.25)

for t1 in threads:
    t1.join()   #让主进程等待子进程结束才继续走后续的逻辑

print("端口开放列表为:")
for i in list1:
    print(colors.OKGREEN+i+colors.ENDC)
    time.sleep(0.1)
print(f"PortScan is Finish ,OpenNum is {openNum}")

总结

一个简单的扫描器,学习任重而道远,路漫漫其修远兮~
源代码在github上哦

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号