Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.47 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. # +-----------------------------------------------------------------------+
  4. # | Simple port scanning for ipv4 ranges, with standart python libraries  |
  5. # | by molemime 2020 (c) use at your own risk                             |
  6. # +-----------------------------------------------------------------------+
  7. import sys, threading, socket, struct
  8. from threading import Thread
  9.  
  10. # generate ipv4 list by ip range in CIDR notice
  11. def converter( cidr ):
  12.     result = []
  13.     _range = cidr.split("/")
  14.    
  15.     if len( _range ) < 2 :
  16.         sys.exit( "\nLoad invalid range format from source file. Try again in CIDR notice!\n" )
  17.     else:  
  18.         if int(_range[1]) <= 32 and int(_range[1]) >= 24 :
  19.             block = 256 - 2 ** (32 - int(_range[1]))
  20.             _mask = "255.255.255."+ str( block )
  21.                
  22.         if int(_range[1]) <= 23 and int(_range[1]) >= 16:
  23.             block = 256 - 2 ** (24 - int(_range[1]))
  24.             _mask = "255.255."+ str(block) +".0"
  25.            
  26.         if int(_range[1]) <= 15 and int(_range[1]) >= 8:
  27.             block = 256 - 2 ** (15 - int(_range[1]))
  28.             _mask = "255."+ str(block) +".0.0"
  29.                
  30.         if int(_range[1]) <= 7 and int(_range[1]) >= 0:
  31.             block = 256 - 2 ** (7 - int(_range[1]))
  32.             _mask = str(block) +".0.0.0"
  33.    
  34.     _s = struct.unpack( "!l", socket.inet_aton(_range[0]) )[0]
  35.     _e = struct.unpack( "!l", socket.inet_aton(_range[0]) )[0] - struct.unpack( "!l", socket.inet_aton(_mask) )[0]
  36.    
  37.     for address in range(_s, _e):
  38.         result.append( socket.inet_ntoa( struct.pack("!l", address) ) )
  39.        
  40.     return result
  41.  
  42. # connect on port by socket library
  43. def checker( host, port ):
  44.     try:
  45.         s = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
  46.         s.settimeout(5)
  47.         s.connect( (str(host), int(port)) )
  48.         with open( "service-check.log", "a+" ) as _log:
  49.             _log.write( host +"\t"+ str(port) +"\tport available\n" )
  50.             _log.close()
  51.  
  52.     except socket.error:
  53.         sys.stdout.write( host +"\t"+ str(port) +"\taddress not available\r" )
  54.         pass
  55.     except socket.timeout:
  56.         sys.stdout.write( host +":\t"+ str(port) +"\tport filtred\r" )
  57.         pass
  58.     finally:
  59.         sys.stdout.flush()
  60.        
  61. if __name__ == "__main__":
  62.     if len(sys.argv) < 3:
  63.         # so few input argument, print help info
  64.         print "_____________________________________________________________"
  65.         print "\n\t+ Use this script as command: \n\t|_ python "+ sys.argv[0] +" /source/file.txt 80"
  66.         print "\t|_ python "+ sys.argv[0] +" /source/file.txt 80-8080"
  67.         print "\t|_ python "+ sys.argv[0] +" /source/file.txt 80,81,82"
  68.         print "_____________________________________________________________"
  69.         print "\n* Source file must contain ip ranges in CIDR notice.\n"
  70.     else:
  71.         # for scanning by port range
  72.         if sys.argv[2].find("-") > 0:
  73.             for port in range( int(sys.argv[2].split("-")[0]), int(sys.argv[2].split("-")[1]) + 1 ):
  74.                 for line in open(sys.argv[1]):
  75.                     for ip in converter( line.replace("\n", "") ):
  76.                         myThread = threading.Thread( target=checker, args=( str(ip) , int(port) ) )
  77.                         myThread.start()
  78.        
  79.         # for scannig by port list 
  80.         if sys.argv[2].find(",") > 0:
  81.             for port in sys.argv[2].split(","):
  82.                 for line in open(sys.argv[1]):
  83.                     for ip in converter( line.replace("\n", "") ):
  84.                         myThread = threading.Thread( target=checker, args=( str(ip) , int(port) ) )
  85.                         myThread.start()
  86.        
  87.         # for scanning by single port
  88.         if sys.argv[2].find(",") == -1 and sys.argv[2].find("-") == -1:
  89.             for line in open(sys.argv[1]):
  90.                 for ip in converter( line.replace("\n", "") ):
  91.                     myThread = threading.Thread( target=checker, args=( str(ip) , int(sys.argv[2] ) ) )
  92.                     myThread.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement