前言:接下来会写一系列Python在安全方面的小脚本,大家可以试着敲敲代码,可以用来提升自己学习的兴趣,学习有回馈才有动力。
目录:
0x01:处理流程
0x02:代码实现
0x03:逐行解析
0x01 处理流程
0x02 代码实现
# -*- coding: utf-8 -*- ''' Program:端口扫描器 Function:利用socket库连接端口,进行IP的开放端口扫描 Version:Python3.6 Time:2017/10/13 Author:Walks 个人博客:http://www.bywalks.com ''' from socket import * import threading #建立线程锁 lock = threading.RLock() openNum = 0 threads = [] #端口扫描函数 def portScanner(host,port): global openNum try: s = socket(AF_INET,SOCK_STREAM) s.connect((host,port)) if lock.acquire(): openNum+=1 print('[+] %d open' % port) lock.release() s.close() except: pass def main(): setdefaulttimeout(1) #扫描1-1024端口 for p in range(1,1024): t = threading.Thread(target=portScanner,args=('119.188.97.150',p)) threads.append(t) t.start() for t in threads: t.join() print('[*] The scan is complete!') print('[*] A total of %d open port ' % (openNum)) if __name__ == '__main__': main()
0x03:逐行解析
# -*- coding: utf-8 -*- ''' Program:端口扫描器 Function:利用socket库连接端口,进行IP的开放端口扫描 Version:Python3.6 Time:2017/10/13 Author:Walks 个人博客:http://www.bywalks.com ''' #导入socket和线程库 from socket import * import threading #建立线程锁,Rlock用来确保多线程多共享资源时,只有一个线程访问共享资源 lock = threading.RLock() #开放端口数量计算,在这为共享资源 openNum = 0 #线程列表 threads = [] #端口扫描函数 def portScanner(host,port): global openNum try: #定义socket对象 s = socket(AF_INET,SOCK_STREAM) #连接IP和端口,当连接了才可以运行接下来的代码 s.connect((host,port)) #线程锁的利用 if lock.acquire(): openNum+=1 print('[+] %d open' % port) lock.release() #关闭IP:端口连接 s.close() except: pass def main(): #设置脚本timeout,为socket库里面的 setdefaulttimeout(1) #扫描1-1024端口,range(1,1024)就是1-1024 for p in range(1,1024): #建立线程对象 t = threading.Thread(target=portScanner,args=('119.188.97.150',p)) #将对象添加到线程列表 threads.append(t) #开始线程 t.start() #join:如果一个线程在执行过程中要调用另外一个线程,要等到其完成后才可以运行 for t in threads: t.join() print('[*] The scan is complete!') print('[*] A total of %d open port ' % (openNum)) if __name__ == '__main__': main()
扫描成功图片
转载请注明来自:www.bywalks.com