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

本文介绍了一个使用Python编写的简单扫描器,它结合requests和socket库,实现了对目标网站的IP、端口扫描,并能识别目录。文章详细讲解了如何通过线程池进行并发操作,提供了GitHub代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:原创 请勿转载


前言

提示:学习代码,写的不对请纠正,见谅:
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上哦

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值