2015-08-26 9 views
0

Запуск на Mac Os 10.10.5 Запуск этого сценария для сканирования хостов в сети:Python3.4 -Nmap требует привилегий суперпользователя

import nmap 
nm = nmap.PortScanner() 
nm.scan('192.168.5.1/24', arguments='-O') 
for h in nm.all_hosts(): 
    if 'mac' in nm[h]['addresses']: 
     print(nm[h]['addresses'], nm[h]['vendor']) 

При запуске это его печать:

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/nmap/nmap.py", line 290, in analyse_nmap_xml_scan 
    dom = ET.fromstring(self._nmap_last_output) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/xml/etree/ElementTree.py", line 1326, in XML 
    return parser.close() 
    File "<string>", line None 
xml.etree.ElementTree.ParseError: no element found: line 1, column 0 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/Users/*/Documents/*.py", line 3, in <module> 
    nm.scan('192.168.0.0/24', arguments='-O') 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/nmap/nmap.py", line 235, in scan 
    nmap_err_keep_trace = nmap_err_keep_trace) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/nmap/nmap.py", line 293, in analyse_nmap_xml_scan 
    raise PortScannerError(nmap_err) 
nmap.nmap.PortScannerError: 'TCP/IP fingerprinting (for OS scan) requires root privileges.\nQUITTING!\n' 

Я попытался перейти в этот каталог и выполнить эту команду в терминале: sudo python * .py

({'mac': '02:62:31:41:6D:84', 'ipv4': '192.168.5.1'}, {}) 

Любые предложения по запуску скрипта из ID-кода python?

+0

В какой ОС вы находитесь? – IanAuld

+0

@IanAuld Mac OS 10.10.5 –

ответ

0

Запуск IDLE как root может работать, но это может быть не очень хорошая идея. sudo idle

Вариант 1 (рекомендуется):

Поместите код, требующий повышенные привилегии в питоне файл, который запускается с Судом. Я предполагаю, что вы хотите играть с результатами, так что вы могли бы сохранить сценарий для сохранения результатов в файл, который затем читаете в IDLE.

Следующий код работает в Python 2.7 и 3,4

import nmap 
import json 

nm = nmap.PortScanner() 
nm.scan('192.168.5.1/24',arguments='-O') #Note that I tested with -sP to save time 
output = [] 
with open('output.txt', 'a') as outfile: 
    for h in nm.all_hosts(): 
    if 'mac' in nm[h]['addresses']: 
     item = nm[h]['addresses'] 
     if nm[h]['vendor'].values(): 
     item['vendor'] = list(nm[h]['vendor'].values())[0] 
     output.append(item) 
    json.dump(output, outfile) 

Run sudo python nmaproot.py Поскольку файл пишется корень, вам нужно изменить владельца обратно к себе. sudo chown -r myusername output.txt

В IDLE:

import json 
input = open('output.txt','r'): 
json_data = json.load(input) 
json_data[0] # first host 

Вариант 2 (не рекомендуется вообще):

Используйте подпроцесс для запуска файла с повышенным кодом, как корень и вернуть результат. Это становится грязным и требует жесткого кодирования вашего пароля ... но это возможно.

from subprocess import Popen, PIPE 
cmd = ['sudo', '-S', 'python', 'nmaproot.py'] 
sudopass = 'mypassword' 
p = Popen(cmd, stdin=PIPE, stderr=PIPE,universal_newlines=True, stdout=PIPE) 
output = p.communicate(sudopass + '\n') 

Я уверен в том, как вы можете запустить данную часть вашего питона кода как корень без сохранения его в файл и запустить его отдельно. Я рекомендую вам перейти с опцией 1, поскольку вариант 2 не очень хорош (но было интересно выяснить).

+0

Вы можете подробно рассказать о том, как вы делаете вариант один? Я не уверен, что вы подразумеваете под этим и как это сделать. –

+0

Обновлен ответ с некоторым кодом о том, как вы можете сделать вариант 1 – Duplexia

+0

Обратите внимание, что я не хочу запускать его на терминале. Я бы хотел сделать иметь возможность запускать его на IDLE, если это возможно –

0

Скопируйте ярлык на рабочем столе и назовите его rootidle, затем щелкните правой кнопкой мыши и измените свойства. Перейдите на рабочий стол и добавьте gksu перед/usr/bin/idle3. Затем загрузите и запустите программу

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

  • Нет связанных вопросов^_^