python端口扫描器—多线程

本篇补充上篇的《python制作扫描器》,修改为多线程实现

optparse是Python中的一个命令行参数解析模块,可以方便地处理命令行参数,提供了很多有用的功能,例如:

1、支持长参数和短参数;
2、支持参数的默认值和描述信息;
3、支持参数的互斥和必须出现;
4、支持自定义参数类型和合法值范围等。
5、使用optparse模块可以快速地编写命令行工具,并且用户可以通过-help或--help选项获取帮助信息。

而多线程是Python中常用的一种并发编程方式,能够提高程序的运行效率。通过使用多线程,可以在程序中同时运行多个任务,充分利用CPU资源。

Python中内置的threading模块提供了多线程编程的支持,可以通过创建Thread对象来创建和启动线程,通过使用锁机制来避免多个线程同时访问共享资源导致的数据竞争和错误。

多线程可以用于网络编程、数据处理、并发读写等场景,可以大大提高程序的效率和性能。
以下是端口扫描器用**optparse模块和多线程的结合**

实例

#! /usr/bin/python
# -*-coding: UTF-8 -*-
import socket
from optparse import OptionParser
from threading import Thread

#判断端口是否开放
def is_open(ip,port):
    s = socket.socket
    try:
        s.connect(ip,port)
        return True
    except:
        return False
    pass

#默认扫描函数
def scan(ip,port):

    if is_open(ip,port):
        print("%s的主机 %s 端口 open"%(ip,port))
    else:
        print("%s的主机 %s 端口 close"%(ip,port))
    pass

# #范围扫描函数
# def rscan(ip,s,e):
#     for x in range(int(s),int(e)):
#         if is_open(ip,x):
#             print("%s的主机 %s 端口 open"%(ip,x))
#         else:
#             print("%s的主机 %s 端口 close" % (ip, x))
#     pass



def main():

    usage = "python test2.py -i <target> -p <port> 或者 -i <target> -p all 或者-i <target> -p defaultt "#帮助
    parser = OptionParser(usage=usage)#添加usage方法,python -h 就会出现上面的帮助
    parser.add_option("-p","--port",type="string",dest="port",help="your  target port here")
    parser.add_option("-i","--ip",type="string",dest="ipaddress",help="your  target ip here")

    (option,args) = parser.parse_args()

    ip = option.ipaddress
    port = option.port

    defaultport = ['135','139','445','1433','3306','3389','6379','7001']

    if ',' in port:#xxxx -i  127.0.0.1 -p 81,82
        port = port.split(',')
        p1 = []
        for x in port:
            p1.append(int(x))

        port1 = p1
        # scan(ip,p1)
        for i in port1:
            i = int(i)
            t1 = Thread(target=scan,args=(ip,i))
            t1.start()

    elif '-' in port:#xxxx -i 127.0.0.1 -p 81-90
        port = port.split('-')
        s = port[0]
        e = port[1]

        # rscan(ip,s,e)
        for i in range(int(s),int(e)):
            i = int(i)
            t2 = Thread(target=scan,args=(ip,i,))
            t2.start()

    elif 'all' in port:#xxx -i  127.0.0.1 -p all
        for i in range(65535):
            i = int(i)
            t3 = Thread(target=scan,args=(ip,i,))
            t3.start()

        # rscan(ip,1,65535)

    elif 'default' in port:#xxx -i  127.0.0.1 -p default
        for i in defaultport:
            i = int(i)
            t4 = Thread(target=scan,args=(ip,i,))
            t4.start()
        #scan(ip,defaultport)


    pass

if __name__=='__main__':
    main()

运行后测试结果为:

python test2.py -h
python test2.py -i 127.0.0.1 -p 81,82
python test2.py -i 127.0.0.1 -p 81-85

在这里插入图片描述

python test2.py -i 127.0.0.1 -p all

在这里插入图片描述

python test2.py -i 127.0.0.1 -p default

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值