人性化交互式python脚本,采用多线程方式完成linux服务器开放端口扫描:

 

以下为完整代码:

 

#!/usr/bin/env  python
#-*- coding: UTF-8 -*-

 

#func: scan the open port of server
#author: youjiaLee
#time: 01/27/2013

import sys
import socket
import thread
import time

#START scanning
openPortNum=0
socket.setdefaulttimeout(3)

def usage():
        print '''
                Usage:
                Scan the port of one IP: python scanPort.py -o 
                Scan the port of many IP: python scanPort.py -m 
        '''
        print '\033[32;1mExit\n\033[0m'
        sys.exit(1)

def socket_port(ip,PORT):
        global openPortNum
        if PORT > 65535:
                print 'Port scanning beyond the port range,ending of the scan'
                sys.exit()
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #s.settimeout(float(1))
        result = s.connect_ex((ip,PORT))
        if(result == 0):
                print ip,u":",PORT,u"is Open"
                openPortNum += 1
        s.close()

def start_scan(IP):
        for port in range(0,65535+1):
                thread.start_new_thread(socket_port,(IP,int(port)))
                #To ensure that the first operation method in Seeker
                time.sleep(0.006)

if __name__ == '__main__':
        t = 0
        if len(sys.argv)<2 or  sys.argv[1] == '-h' :
                usage()
        elif sys.argv[1] == '-o':
                ONE_IP = raw_input('Please input ip of scanning: ')
                t = time.time()
                start_scan(ONE_IP)
        elif sys.argv[1] == '-m':
                MANY_IP = raw_input('Please input many ip of scanning: ')
                IP_SEG = MANY_IP.split(',')
                t = time.time()
                for i in IP_SEG:
                        start_scan(i)
        print ''
        print '\033[32;1mOpen port total is %s,Scan used time is: %f\n\033[0m' % ((openPortNum,time.time()-t))