python编写ip列表扫描端口_用Python编写的网络端口扫描器(可运行),注释易慬。...

#!/usr/bin/python3

importthreadingimporttimeimportsocketdef getbanner(IP,port): #获得banner信息

socket.setdefaulttimeout(2)

s=socket.socket()try:

s.connect((IP,port))

threadLock.acquire()

banner=s.recv(1024)

threadLock.release()

s.close()returnbannerexcept:pass

def checkbanner(banner):#检查banner信息

if ("2.3.4" inbanner):print ("banner信息:")print(banner)else:print ("banner信息无价值")

threadLock= threading.Lock() #锁对象:threading.Lock

threads = [] #线程列表

threads_num =0print("**************************************")print("* 欢迎使用网络端口扫描器 *")print("* 1.特定端口扫描 *")print("* 2.全端口扫描 *")print("* 0.退出 *")print("**************************************")

select= float(input("请选择功能:"))if select == 1:

threads_num= int(input("请输入你要创建线程的数量:")) #线程数

port_num = int(input("请输入要扫描的端口数量:")) #端口数

threads_ip = input("要扫描端口号所对应的ip(格式:'ip'):")#目标Ip ip='127.0.0.1'

port_nums = [0 for i in range(port_num + 1)] #一个用来放端口号的数组

for i in range(port_num): #循环放入端口号

port_nums[i + 1] = input("请输入要扫描的端口号:")elif select == 2:

threads_num= 76 #线程数

port_num = 76*880 #端口数

threads_ip = input("要扫描端口号所对应的ip(格式:'ip'):")#目标Ip ip='127.0.0.1'

port_nums = [0 for i in range(port_num + 1)] #一个用来放端口号的数组

for i in range(port_num): #循环放入端口号

port_nums[i] =ielse:

exit()defThread_function(Thread_name,i):if (i <=port_num):

port= port_nums[ i ] #输入连接端口号

print(">>>线程: %s 开始执行 记录时间:%s" % (Thread_name, time.ctime(time.time()))) #输出线程信息

try:print(">>>线程: {} 记录任务:正在扫描的端口号:{},端口号所对应的ip:{}".format(Thread_name,int(port) ,threads_ip))

IP=threads_ip

banner1=getbanner(IP,port)ifbanner1:

checkbanner(banner1)else:print(">>>线程: {} 记录任务结果:没有获得banner信息".format(Thread_name))exceptException as e:print (">>>线程: {} 扫描错误:{}".format(Thread_name,e))print ("--------------------开始扫描--------------------")if(select != 2):for n inrange(0,port_num):

q= (n % threads_num)+1Thread_name= "Thread-"+str(q)

port= port_nums[n + 1]

thread_x= threading.Thread(target = Thread_function,args = (Thread_name,n+1)) #创建新线程

threads.append(thread_x) #添加 线程 到 线程列表

thread_x.start() #开启新线程,开始运行threading.Thread.run方法

else:for n in range(1,threads_num):

Thread_name= "Thread-"+str(n)for p in range((n-1)*880,n*880): #全端口扫描

thread_x = threading.Thread(target = Thread_function,args = (Thread_name,p)) #创建新线程

threads.append(thread_x) #添加 线程 到 线程列表

thread_x.start() #开启新线程,开始运行threading.Thread.run方法

#等待所有线程完成

for t inthreads:

t.join()print ("--------------------扫描完成--------------------")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值