2017-07-28 66 views
0

使用Python libnmap模塊調用get_host_byid,我有這樣的Python代碼:從libnmap返回「無」,而不是一個宿主對象

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) 

當我調用這個函數,我得到的輸出:

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

我意料的是,而不是「無」,我會得到這樣的:

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

我不確定爲什麼致電.get_host_byid()正在返回None而不是NMapHost對象。也許我的anIP字符串有問題,但我找不到錯誤。

+0

我已經做了使用.get_host_byid一些實驗()關閉保存libnmap.objects.report對象。我正在調用帶有我知道在報告中的文字IP地址的函數。有些時候我得到一個NmapHost對象,有時我會回到「無」。根據我使用的數據,我應該每次都得到一個NMapHost對象。報告所依據的掃描結果超過了20MB。可能會有一個變量太大的問題? – Rudi

回答

0

tl; dr:我錯誤地調用了diff函數。

較長答案

libnmap diff函數沒有什麼問題。上述問題中的原始代碼有一個邏輯錯誤,並且錯誤地調用了diff函數。它返回「無」,因爲查詢的主機組不包含請求的主機,這是預期的行爲。正確的調用應該是:

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

換句話說,交換函數調用中兩個變量的位置。然後致電

New.get_host_byid(anIP) 

然後將正常工作。擴展這對其它比較功能,去掉主機的代碼應該是:

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

然後用

Old.get_host_byid(anIP) 

爲改變主機的代碼應該是

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

,然後用

New.get_host_byid(anIP) 

不變主機上的代碼應該是

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

然後用

New.get_host_byid(anIP) 
相關問題