2017-02-16 5 views
1

私はNMAP 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)) 

私は次のエラーを取得しています: RES =呼び出す(CMD) はTypeErrorに

ライン21は、 'モジュール' オブジェクトを呼び出すことはできません

助けてください:D

+0

エラーについてはどこがわかりませんか。あなたは意味をなさないモジュールを呼び出しています。このモジュールで 'invoke.some_function(cmd)'のような_specific_関数を呼びたいと思うかもしれません... – Julien

+0

今はファイルパスのエラーが出ます –

答えて

0

問題は、このモジュール内の関数ではなくモジュールを呼び出すことです。シェルコマンドを実行するには、run関数を使用する必要があります。だから、ファイルの先頭にrunの局所的なインポートを使用してrun(cmd)にあなたのライン21を変更:

一方
from invoke import run 

run(cmd) 

あなたがimport invokeを使用したい場合、あなたはライン21へと変更する必要があります

invoke.run(cmd)