import optparse import socket from socket import * from threading import * screenLock =Semaphore(value=1) def connScan(tgtHost,tgtPort): try: connSkt = socket(AF_INET,SOCK_STREAM) connSkt.connect((tgtHost,tgtPort)) connSkt.send('ViolentPython\r\n'.encode('ascii')) result = connSkt.recv(100) screenLock.acquire() #执行一个加锁操作 print('[+] %d/tcp open'%tgtPort) print('[+] ' + str(result)) connSkt.close() except: screenLock.acquire() #执行一个加锁操作 print('[-] %d/tcp closed'%tgtPort) finally: #执行释放锁的操作,同时将socket的连接在其后关闭 screenLock.release() connSkt.close()
def portScan(tgtHost,tgtPorts): try: tgtIP = gethostbyname(tgtHost) except: print("[-] Cannot resolve '%s' : Unknown host"%tgtHost) return
try:
tgtName = gethostbyaddr(tgtIP)
print('\n[+] Scan Results for: ' + tgtName[0])
except:
print('\n[+] Scan Results for: ' + tgtIP)
setdefaulttimeout(1)
for tgtPort in tgtPorts:
print('Scanning port' + tgtPort)
connScan(tgtHost,int(tgtPort))
def main(): parser = optparse.OptionParser("[*] Usage : ./portscanner.py -H <target host> -p <target port>") parser.add_option('-H',dest='tgtHost',type='string',help='specify target host') parser.add_option('-p',dest='tgtPort',type='string',help='specify target port[s]') (options,args) = 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()