2014-12-29 38 views
1

我有我的IP在我的Python腳本的列表,我試圖對他們每個人運行nmap掃描來查找打開的端口。我不斷收到此錯誤:(有一個在「IP地址在此」部分的實際IP地址,雖然)Python的KeyError掃描打開端口的主機列表

Traceback (most recent call last): 
    File "rscan.py", line 33, in <module> 
    main() 
    File "rscan.py", line 30, in main 
    vulnscan(nm, L) 
    File "rscan.py", line 6, in vulnscan 
    for port in nm[item].all_tcp(): 
    File "build/bdist.linux-x86_64/egg/nmap/nmap.py", line 567, in __getitem__ 
KeyError: u'IP ADDRESS HERE' 

我的代碼掃描部分,我試圖爲是:

for item in L: 
     for port in nm[item].all_tcp(): 
      state= nm[item]['tcp'][port]['state'] 
      if state== 'open': 
       print state 

'L'是包含我的IP地址的列表。

什麼是使用nmap掃描開放端口的IP地址的小列表的正確方法?

+0

什麼包您使用?代碼的其餘部分在哪裏,你實際告訴它什麼ips和端口掃描?如果是這樣,你可能沒有正確使用它,但我只能假設你正在使用python-nmap。 – Ngenator

+0

我的腳本的其他部分只是收集我的IP地址並將它們放入列表中。就掃描端口而言,這是我所擁有的。我錯過了一些重要的東西,是嗎? – Shane

+0

我假設你使用python-nmap?查看如何正確使用它的用法部分http://xael.org/norman/python/python-nmap/#usage – Ngenator

回答

0

這樣,根據您的代碼:

for item in L: 
    if item in nm.all_hosts(): 
     for port in nm[item].all_tcp(): 
      state = nm[item]['tcp'][port]['state'] 
      if state == 'open': 
       print state 

檢查是否指定ip地址是nm.all_hosts()(返回的ips列表)允許您安全地查詢nm[item]之後。

請注意,你可以把這個代碼通過簡單的信用證清單與nm.all_hosts()返回的IP地址的列表相交有點清潔:

items = list(set(L) & set(nm.all_hosts())) 

for item in items: 
    for port in nm[item].all_tcp(): 
     state = nm[item]['tcp'][port]['state'] 
     if state == 'open': 
      print state 
+0

感謝您的快速回復。當我嘗試時,我得到「PortScanner對象沒有任何屬性」得到「 – Shane

+0

忘記我以前的評論,我要檢查這個 – Jivan

+0

更新。現在應該工作:) – Jivan