scripts:python:scanner_ip

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
scripts:python:scanner_ip [2019/05/04 16:31] – créée Marc Fournierscripts:python:scanner_ip [2020/10/03 09:26] (Version actuelle) FabLac
Ligne 1: Ligne 1:
 ====== Scanner IP ====== ====== Scanner IP ======
-===== Scripts pour scanner les IP d'un réseau =====+===== Script pour scanner les IP d'un réseau =====
  
-** Usage**+=== Usage : ===
  
-Usage: python scan-ip.py [options] +<code>python scan-ip.py [options] </code> 
 + 
 +=== Options: ===
  
-Options: 
  <code> -h, --help            show this help message and exit  <code> -h, --help            show this help message and exit
   -i IP, --ip=IP        Specifie une adresse ou la plage IP   -i IP, --ip=IP        Specifie une adresse ou la plage IP
Ligne 21: Ligne 22:
 <code>python scan-ip.py --help</code> <code>python scan-ip.py --help</code>
  
-Scanner es IP du réseau 192.168.1.0/24 +Scanner des IP du réseau 192.168.1.0/24 
-<code> python scan-ip.py -i 192:168:1:1-254</code>+<code> python scan-ip.py -i 192.168.1.1-254</code> 
 + 
 + 
 +=== code source : scan-ip.py === 
 +<code>#!/usr/bin/python 
 + 
 +infos ='''   
 +###################################################### 
 + 
 +   --- OPTIONS et USAGE --- 
 + 
 +  python scan-ip.py [options]  
 +  options : -h, -i, -t, -o, -n 
 + 
 +  Exemples : 
 +          python scan-ip.py --help 
 + 
 +          python scan-ip.py -i 192.168.1.1-254 
 + 
 +------------------------------------------------------ 
 +                                    
 +###################################################### 
 +''' 
 +# ====================================================  
 +# usage des options 
 +usage = "usage: %prog [options] " 
 + 
 +# ==================================================== 
 + 
 +# Importation des Modules 
 +import os 
 +import multiprocessing 
 +import time 
 +import optparse 
 +import platform 
 + 
 + 
 +# Ping 
 +class PingScan: 
 + def __init__(self, target, thread, output, timeout): 
 +  self.start_time=time.time() 
 +  self.collect_ip=multiprocessing.Queue() 
 +  self.target=target 
 +  self.thread=thread 
 +  self.output=output 
 +  self.timeout=timeout 
 +  self.set_os_command() 
 +  self.multi_scan() 
 + 
 +  # Sauvegarde Output 
 + def save_output(self): 
 +  f=open(self.output,'a'
 +  for i in self.collect_ip: 
 +   f.write(i+'\n'
 +  f.close() 
 +  return 
 + 
 + # Multi_processing 
 + def multi_scan(self): 
 +  proces=[] 
 +  for ip in self.target: 
 +   k=len(multiprocessing.active_children()) 
 +   if k==self.thread: 
 +    time.sleep(3) 
 +    self.thread=self.thread+30 
 +   mythread=multiprocessing.Process(target=self.checkping, args=(ip,)) 
 +   mythread.start() 
 +   proces.append(mythread) 
 + 
 +  for mythread in proces: 
 +   mythread.join() 
 +  self.endtime=time.time() 
 +  self.affichage_resultats() 
 +  return 
 + 
 + # Affichage 
 + def affichage_resultats(self): 
 +  sauvegarde_ip=[] 
 +  x=1 
 +  while x==1: 
 +   try: 
 +    sauvegarde_ip.append(self.collect_ip.get_nowait()) 
 +   except: 
 +    x=x+1 
 +  self.collect_ip=sauvegarde_ip 
 + 
 +  print "\n"*3,"#"*80 
 +  print "[+] Demarrage Scan \t\t:\t",time.ctime(self.start_time) 
 +  print "[+] Fin du Scan  \t\t:\t",time.ctime(self.endtime) 
 +  print "[+] Duree Totale du scan \t:\t",self.endtime-self.start_time 
 +  print "[+] Nombre Adresses IP Actives\t:\t",len(self.collect_ip) 
 +  if self.output: 
 +   self.save_output() 
 +  return 
 + 
 + # Selection de commande selon OS 
 + def set_os_command(self): 
 +  oper = platform.system() 
 +  if (oper=="Windows"): 
 +   ping = "ping -n {} {}" 
 +  elif (oper== "Linux"): 
 +   ping= "ping -c {} {}" 
 +  else : 
 +   ping= "ping -c {} {}" 
 +  self.commad=ping 
 +  return 
 + 
 + # Status IP 
 + def checkping(self, ip): 
 +  ping=self.commad 
 +  recv=os.popen(ping.format(self.timeout, ip)).read() 
 +  recv=recv.upper() 
 +  if recv.count('TTL'): 
 +   print "[+]\t {} \t==> IP Active ".format(ip) 
 +   self.collect_ip.put(ip) 
 +  return 
 + 
 + 
 +# Extraction plage IP 
 +def extraction(plage): 
 + storeplage=[] 
 + if plage: 
 +  # Verification plage IP 
 +  if "-" in plage and "," not in plage: 
 +   x1,x2=plage.split('-'
 +   storeplage=range(int(x1),int(x2)) 
 +  elif "," in plage and "-" not in plage: 
 +   storeplage=plage.split(','
 +  elif "," in plage and "-" in plage: 
 +   x2=[] 
 +   for i in plage.split(','): 
 +    if '-' in i: 
 +     y1,y2=i.split('-'
 +     x2=x2+range(int(y1),int(y2)) 
 +    else: 
 +     x2.append(i) 
 +   storeplage=x2 
 +  else: 
 +   storeplage.append(plage) 
 + else: 
 +  pass 
 + return storeplage 
 + 
 +# Extraction adresse IP 
 +def IP_extractor(ip): 
 + storeobj=[] 
 + ip=ip.split(':'
 + x1=extraction(ip[0]) 
 + x2=extraction(ip[1]) 
 + x3=extraction(ip[2]) 
 + x4=extraction(ip[3]) 
 + for i1 in x1: 
 +  for i2 in x2: 
 +   for i3 in x3: 
 +    for i4 in x4: 
 +     storeobj.append("{}.{}.{}.{}".format(i1,i2,i3,i4)) 
 + return storeobj 
 + 
 +def main(): 
 + CBLUE = '\33[34m' 
 + CEND = '\033[0m' 
 + print(CBLUE + infos + CEND) 
 + parser=optparse.OptionParser(usage=usage) 
 + parser.add_option('-i','--ip',type='string',dest='ip',help="Specifie une adresse ou la plage IP", default=None) 
 + parser.add_option('-t',"--thread",type='string', dest="thread", help="Specifie le nombre de threads pour le scan ", default='100'
 + parser.add_option('-o',"--output",type='string', dest="output", help="Specifie le nom et le chemin pour le fichier de sortie .txt", default="logs_scan_ip.txt"
 + parser.add_option('-n','--timeout',type='string', dest="timeout", help="Specifie le nombre de tentatives par IP",default='1'
 + (options, args)= parser.parse_args() 
 + if not options.ip: 
 +  print "[+] Indiquez une plage IP, ex: scan-ip.py -i 192.168.1.1-254 " 
 +  exit(0) 
 + target=options.ip 
 + thread=options.thread 
 + output=options.output 
 + timeout=options.timeout 
 + target=IP_extractor(target) 
 + PingScan(target,thread,output,timeout) 
 + return
  
  
-**scan-ip.py** +if __name__ == '__main__': 
-<code>ssh rov@192.168.254.1</code>+ main() 
 +</code>
  • scripts/python/scanner_ip.1556987517.txt.gz
  • Dernière modification : 2019/05/04 16:31
  • de Marc Fournier