参考一位前辈的文章:https://blog.csdn.net/cjx529377/article/details/78597170
源码:
#!/usr/bin/python3
import socket
import sys
import threading
import time
openPortNum = 0
#设置socket连接超时时间
socket.setdefaulttimeout(3)
def socket_port(ip,port):
global openPortNum
time.sleep(0.001)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
result = s.connect_ex((ip,port));
if(result ==0):
print ("[+] %d Port Is Open" % port);
openPortNum +=1;
s.close();
if __name__ == '__main__':
start_time = time.time()
for port in range(0,5000):
#创建线程 指定函数和参数 target=函数名,args=(函数参数1,函数参数2)
thread1 = threading.Thread(target=socket_port,args=("192.168.64.129",port));
#启动线程
thread1.start()
print("Total Open Port is %s Use Time:%f" % (openPortNum,time.time()-start_time));
相关函数解释:
socket中的connect_ex():connect()函数的扩展版本,出错时返回错误码,不是抛出异常 ,返回0表示连接成功
time.time()获取当前时间
global使用全局变量 必须要在函数内声明一次全局变量
运行结果: