2016-10-15 21 views
0

IPアドレスを取得し、nmapスキャンを実行し、出力を取り込んでテキストファイルに格納するプログラムを作成中です。スキャンは正常に動作しますが、なぜテキストファイルに何も書き込んでいないのはわかりません。ここで列挙型プログラム

は、私がこれまで

if __name__ == "__main__": 

    import socket 
    import nmap 
    import sys 
    import io 
    from libnmap.parser import NmapParser, NmapParserException 
    from libnmap.process import NmapProcess 
    from time import sleep 
    from os import path 

    #Program Banner 
    if len(sys.argv) <= 1: 
     print(
""" 
test 
""") 
     sys.exit() 


#Grab IP Address as argument 
if len(sys.argv)==2: 
    ip = sys.argv[1] 
    print "\n[+] Reading IP Address" 


#Function - Pass IP to Nmap then start scanning 
print "\n[+] Passing " + ip + " to Nmap..." 
print("\n[+] Starting Nmap Scan\n") 

def nmap_scan(ip, options): 
    parsed = None 
    nmproc = NmapProcess(ip, options) 
    rc = nmproc.run() 
    if rc != 0: 
     print("nmap scan failed: {0}".format(nmproc.stderr)) 

    try: 
     parsed = NmapParser.parse(nmproc.stdout) 
    except NmapParserException as e: 
     print("Exception raised while parsing scan: {0}".format(e.msg)) 

    return parsed 


#Function - Display Nmap scan results 
def show_scan(nmap_report): 
    for host in nmap_report.hosts: 
     if len(host.hostnames): 
      tmp_host = host.hostnames.pop() 
     else: 
      tmp_host = host.address 

     print("Host is [ %s ]\n" % str.upper(host.status)) 
     print(" PORT  STATE   SERVICE") 

     for serv in host.services: 
      pserv = "{0:>5s}/{1:3s} {2:12s} {3}".format(
        str(serv.port), 
        serv.protocol, 
        serv.state, 
        serv.service) 
      if len(serv.banner): 
       pserv += " ({0})".format(serv.banner) 
      print(pserv) 


#Function - Define output text file name & write to file 
def createFile(dest): 
    name = "Enumerator-Results.txt" 

    if not(path.isfile(dest+name)): 
     f = open(dest+name,"a+") 
     f.write(show_scan(report)) 
     f.close()  



if __name__ == "__main__": 
    report = nmap_scan(ip, "-sV") 
    if report: 
     destination = "/root/Desktop/" 
     createFile(destination) 
     show_scan(report) 
     print "\nReport Complete!" 
    else: 
     print("No results returned") 

答えて

0

持っているものをあなたのshow_scan()関数の中でprint文を使用しています。代わりに、ファイル参照をshow_scan()に渡し、print()呼び出しをf.write()呼び出しに置き換えてみてください。これにより、現在印刷しているすべてのファイルを端末に保存することができます。

また、show_scanがf.write()から分離されるようにコードを変更することもできます。

すなわちそれはあなたが生の出力や、あなたが画面に印刷しているを保存するかどうかに依存

f.write(report) 

f.write(show_scan(report)) 

を変更します。

また、あなたがそのように文字列で)それはちょうどあなたが常に(f.writeを呼び出していることを確認してください

createFile(destination, report) 

すなわち印刷するレポートを持っているようにCreateFileにレポートの参照を渡す必要がありますパラメータ。

#Function - Define output text file name & write to file 
def createFile(dest, report): 
    name = "Enumerator-Results.txt" 

    if not(path.isfile(dest+name)): 
     f = open(dest+name,"a+") 
     f.write(report) 
     f.close()  



if __name__ == "__main__": 
    report = nmap_scan(ip, "-sV") 
    if report: 
     destination = "/root/Desktop/" 
     createFile(destination, report) 
     show_scan(report) 
     print "\nReport Complete!" 
    else: 
     print("No results returned") 
+0

この方法を意味しますか? – Sam

+0

申し訳ありません。最新のコードスニペットを貼り付けるにはどうすればいいですか – Sam

+0

更新されたコードスニペット@ sam-findlayを追加するには – Sam