2017-02-16 2 views
1

Я работаю над сценарием для сканирования сети для активных пользователей, использующих Nmap CMD строки Invoke: Мой код ниже:Ошибки при запуске CMD строки вызова Python

import socket, subprocess, nmap, time,os, invoke 


ipaddr = socket.gethostbyname(socket.gethostname()) 
print (ipaddr) 

ip = ipaddr 
proc = subprocess.Popen('ipconfig',stdout=subprocess.PIPE) 
while True: 
    line = proc.stdout.readline() 
    if ip.encode() in line: 
     break 
mask = proc.stdout.readline().rstrip().split(b':')[-1].replace(b'  ',b'').decode() 
print(mask) 
network = ip + "/" + mask 
print(network) 
t0 = time.clock() 

print("Using network: " + network) 
cmd = 'nmap -n -sP -T4 ' + network + ' 2>&1' 
res = invoke(cmd) 
lines = res.split('\n') 
print(lines) 
for i in lines: 
    m = find('Host\s+\(?([0-9\.]+)\)?\s+appears to be up.', i) 
    if m: 
     print(m, "\t", nslookup(m)) 

t1 = time.clock() 
print("Scan complete!") 
print("it took %d seconds to scan", (t1-t0)) 

Я получаю следующее сообщение об ошибке :

линия 21, в Рез = вызова (CMD) TypeError: 'модуль' объект не вызываемая

Пожалуйста, помогите: D

+0

Что неясно об ошибке? Вы вызываете модуль, который не имеет смысла. Вероятно, вы хотите вызвать функцию _specific_ в этом модуле, например 'invoke.some_function (cmd)' ... – Julien

+0

Теперь я получаю ошибку пути к файлу –

ответ

0

Проблема заключается в том, что вы вызываете модуль, а не функцию внутри этого модуля. Вы должны использовать функцию run для запуска команды оболочки. Таким образом, в верхней части файла использовать локальный импорт run и изменить ваш линии 21 в run(cmd):

from invoke import run 

run(cmd) 

С другой стороны, если вы хотите использовать import invoke, вам придется изменить линию 21:

invoke.run(cmd) 
Смежные вопросы