This article introduces how to use Python to implement a simple port scanner. based on some information on the Internet, I have added some new content.
# Coding = utf-8import socketimport timeimport sysimport structimport threadingfrom threading import Thread, activeCountresults = [] def portScanner (ip, port): server = (ip, port) sockfd = socket. socket (socket. AF_INET, socket. SOCK_STREAM) sockfd. settimeout (0.1) # set the socket timeout in blocking mode. ret = sockfd. connect_ex (server) #0 is returned for success, and error is returned for failure. If not ret: sockfd. close () results. append ([ip, port]) # print '% s: % s is opened... '% (ip, port) else: sockfd. close () pass return ''def ip2num (ip): # Convert an ip address to a numeric lp = [int (x) for x in ip address. split ('. ')] return lp [0] <24 | lp [1] <16 | lp [2] <8 | lp [3] def num2ip (num ): ip = ['',''] ip [3] = (num & 0xff) ip [2] = (num & 0xff00)> 8 ip [1] = (num & 0xff0000)> 16 ip [0] = (num & 0xff000000)> 24 retur N' % s. % s. % s. % s' % (ip [0], ip [1], ip [2], ip [3]) def iprange (ip1, ip2): num1 = socket. ntohl (struct. unpack ("I", socket. inet_aton (str (ip1) [0]) num2 = socket. ntohl (struct. unpack ("I", socket. inet_aton (str (ip2) [0]) tmp = num2-num1 if tmp <0: return None else: return num1, num2, tmpif name = 'main ': if (len (sys. argv )! = 4) & (len (sys. argv )! = 2): # Usage description print 'Usage: \ n \ tstrap. py startip endip port 'print' \ tstrap. py ip'sys. exit () if len (sys. argv) = 4: # scan time_start = time for an IP segment. time () # start time startip = sys. argv [1] # starting IP address endip = sys. argv [2] # End IP port = int (sys. argv [3]) # port number res = iprange (startip, endip) if not res: print 'endip must be bigger than startone' sys. exit () elif res [2] = 0: portScanner (startip, port) else: for x in xrange (int (res [2]) + 1 ): # The IP address increases sequentially by startipnum = ip2num (startip) startipnum = startipnum + x if activeCount () <= 1000: Thread (target = portnum, args = (num2ip (startipnum ), port )). start () print "There are % d hosts. "% len (results) results. sort () for ip, port in results: print "% s: % d is opened... "% (ip, port) times = time. time ()-time_start # print 'use time: % s' % times if len (sys. argv) = 2: time_start = time. time () port = 0 ip = sys. argv [1] while (port <2000): if activeCount () <= 40: # set 40 Thread scan Thread (target = portcount, args = (ip, port )). start () port = port + 1 results. sort () for ip, port in results: print "% s: % d is opened... "% (ip, port) times = time. time ()-time_start print 'use time: % s' % times
The effect is as follows:
The preceding section describes how to use Python to implement a simple port scanner. For more information, see other related articles in the first PHP community!