2014-12-29 4 views
1

У меня есть список моих ip-адресов в моем скрипте python, и я пытаюсь запустить nmap-сканирование для каждого из них, чтобы найти открытые порты. Я получаю эту ошибку: (. Там есть фактический IP-адрес в «IP-адресе здесь» часть, хотя)Python Список сканирования ключей для открытых портов

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-адреса.

Каков правильный способ сканирования небольшого списка IP-адресов для открытых портов с использованием nmap?

+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] впоследствии.

Обратите внимание, что вы могли бы сделать этот код немного чище, просто пересекающих список L со списком IP-адресов, возвращаемый nm.all_hosts():

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 нет атрибута« get » – Shane

+0

забыть мой предыдущий комментарий, я собираюсь проверить это – Jivan

+0

Обновлено. Должен работать сейчас :) – Jivan

Смежные вопросы