python 端口扫描器
# -*- coding = utf-8 -*- # @Time : 2021/8/30 21:42 # @Author : 刘卓文 # @File : 端口扫描器.py # @Software : PyCharm #用户通过你设定的变量来传入相应所需要的值 import optparse from socket import * from threading import * #开发第二步,生成connScan和portScan函数 #connScan 原理非常简单,就是利用connect,未连接则关闭 def connScan(tgtHost,tgtPort): try: conn = socket(AF_INET,SOCK_STREAM) #实例化一个socket对象 conn.connect((tgtHost,tgtHost)) #发送垃圾信息等待响应,跟进得到的信息就可以知道端口上运行的应用 conn.send('ViolentPython\r\n') results = conn.recv(100) print('[+]%d/tcp closed'% tgtPort) print('[+] ' + str(results)) conn.close() except: print('[-]%d/tcp close'% tgtPort) #portScan函数解构不同的域名,起到每次扫描标识符的意义 def portScan(tgtHost,tgtPorts): try: #先通过host得到ip是多少 tgtIp = gethostbyname(tgtHost) except: #找不到就说不知道这是啥就好了 print("[-] Cannot resolve '%s':Unknown host"%tgtHost) return try: #能找到主机名是最好的 tgtName = gethostbyaddr(tgtIp) print('\n[+] Scan Results for: ' + tgtName[0]) except: #找不到就用第一步得到的ip也可以 print('\n[+] Scan Results for: ' + tgtIp) setdefaulttimeout(1) for tgtPort in tgtPorts: print('scanning port ' + tgtPort) connScan(tgtHost,int(tgtPort)) #第一步传入使用指南 def main(): usage = "-H <target host> -p <target port>" parser = optparse.OptionParser(usage) #第二步传入实际参数代表的意义,dest=key parser.add_option('-H',dest='tgtHost',type='string',help='target host') parser.add_option('-P',dest='tgtPort',type='string',help='target port') #第三步,parse_args用来接收你的参数,options保存的是接受的变量,agrs保存的是未接收的变量 (options,agrs) = parser.parse_args() tgtHost = options.tgtHost tgtPorts = str(options.tgtPort).split(',') if(tgtHost==None) | (tgtPorts[0]==None): print(parser.usage) exit(0) portScan(tgtHost,tgtPorts) if __name__=='__main__': main()
python_threading模块的加入,重点在于screenLock的设置
# -*- coding = utf-8 -*- # @Time : 2021/8/30 21:42 # @Author : 刘卓文 # @File : 端口扫描器.py # @Software : PyCharm #用户通过你设定的变量来传入相应所需要的值 import optparse from socket import * from threading import * screenLock = Semaphore(value=1) #开发第二步,生成connScan和portScan函数 #connScan 原理非常简单,就是利用connect,未连接则关闭 def connScan(tgtHost,tgtPort): try: conn = socket(AF_INET,SOCK_STREAM) #实例化一个socket对象 conn.connect((tgtHost,tgtPort)) #发送垃圾信息等待响应,跟进得到的信息就可以知道端口上运行的应用 conn.send('ViolentPython\r\n') results = conn.recv(100) screenLock.acquire() print('[+]%d/tcp closed'% tgtPort) print('[+] ' + str(results)) except: screenLock.acquire() print('[-]%d/tcp close'% tgtPort) finally: screenLock.release() conn.close() #portScan函数解构不同的域名,起到每次扫描标识符的意义 def portScan(tgtHost,tgtPorts): try: #先通过host得到ip是多少 tgtIp = gethostbyname(tgtHost) except: #找不到就说不知道这是啥就好了 print("[-] Cannot resolve '%s':Unknown host"%tgtHost) return try: #能找到主机名是最好的 tgtName = gethostbyaddr(tgtIp) print('\n[+] Scan Results for: ' + tgtName[0]) except: #找不到就用第一步得到的ip也可以 print('\n[+] Scan Results for: ' + tgtIp) setdefaulttimeout(1) for tgtPort in tgtPorts: t = Thread(target=connScan,args=(tgtHost,int(tgtPort))) t.start() #第一步传入使用指南 def main(): parser = optparse.OptionParser("[*] Usage : ./portscanner.py -H <target host> -p <target port>") #第二步传入实际参数代表的意义,dest=key parser.add_option('-H',dest='tgtHost',type='string',help='target host') parser.add_option('-P',dest='tgtPort',type='string',help='target port') #第三步,parse_args用来接收你的参数,options保存的是接受的变量,agrs保存的是未接收的变量 (options,agrs) = parser.parse_args() tgtHost = options.tgtHost tgtPorts = str(options.tgtPort).split(',') if(tgtHost==None) | (tgtPorts[0]==None): print(parser.usage) exit(0) portScan(tgtHost,tgtPorts) if __name__=='__main__': main()

浙公网安备 33010602011771号