枚举程序

2024-04-26 18:26:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个程序,它接受一个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")

Tags: namefromimportreportiphostscanlen
1条回答
网友
1楼 · 发布于 2024-04-26 18:26:46

您正在show\u scan()函数中使用print语句。相反,请尝试传递文件引用以显示\u scan(),并用f.write()调用替换print()调用。这会将当前打印到终端的所有内容保存到文件中。你知道吗

或者,您可以更改代码,以便show\u scan与f.write()分开。你知道吗

ie更改

f.write(show_scan(report))

f.write(report)

这取决于您是要保存原始输出还是要在屏幕上打印什么。你知道吗

此外,您还需要将报告的引用传递给createFile,以便它具有要打印的报告

createFile(destination, report)

只需确保总是以字符串作为参数调用f.write()。你知道吗

#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")

相关问题 更多 >