2017-07-28 2 views
0

Utilisation du module libnmap python, j'ai ce code python:Appel get_host_byid de retours libnmap "Aucun" au lieu d'un objet hôte

def DiffScan(Old, New): 
     Added = Old.diff(New).added() 
     for i in Added: 
      anIP = i.split('::')[1] 
      print "IP for lookup is " + anIP + " of " + str(type(anIP)) 
      anewhost = New.get_host_byid(anIP) 
      pprint.pprint(anewhost) 

Quand j'appelle cette fonction, je reçois la sortie:

IP for lookup is X.X.X.X of <type 'str'> 
None 
IP for lookup is Y.Y.Y.Y of <type 'str'> 
None 

Mon attente est que, au lieu de « aucun », je reçois quelque chose comme:

IP for lookup is Z.Z.Z.Z of <type 'str'> 
NmapHost: [Z.Z.Z.Z() - up] 

Je ne suis pas sûr pourquoi la appel à .get_host_byid() renvoie Aucun et pas un objet NMapHost. Peut-être qu'il y a un problème avec ma chaîne anIP, mais je ne trouve pas l'erreur.

+0

Je l'ai fait un peu plus d'expérimentation en utilisant .get_host_byid() hors d'un objet sauvé libnmap.objects.report. J'appelle la fonction avec les adresses IP littérales que je connais sont dans le rapport. Parfois je récupère un objet NmapHost et parfois je reviens "None". Sur la base des données que j'utilise, je devrais avoir un objet NMapHost à chaque fois. L'analyse sur laquelle le rapport est basé est de plus de 20 Mo. Peut-il y avoir un problème avec une variable trop grande? – Rudi

Répondre

0

tl; dr: J'ai appelé incorrectement la fonction diff.

réponse plus longue

Il n'y a rien de mal avec la fonction libnmap diff. Le code d'origine dans la question ci-dessus a une erreur de logique et appelle incorrectement la fonction diff. Il retournait "None" car l'ensemble des hôtes interrogés ne contenait pas l'hôte demandé, ce qui est un comportement attendu. L'appel correct doit être:

Added = New.diff(Old).added() 

En d'autres termes, permuter les positions des deux variables dans l'appel de fonction. Ensuite, l'appel à

New.get_host_byid(anIP) 

fonctionnera alors correctement. L'extension à d'autres fonctions diff, le code d'hôtes délogées doivent être:

Removed = New.diff(Old).removed() 

puis utilisez

Old.get_host_byid(anIP) 

Le code d'hôtes modifiés doit être

Changed = New.diff(Old).changed() 

puis utilisez

New.get_host_byid(anIP) 

Le code d'hôtes inchangés devrait être

Unchanged = New.diff(Old).unchanged() 

puis utilisez

New.get_host_byid(anIP)