1

我在 python 2.6.5 中编译了一个脚本,该脚本只是为了自动化我最常用的 nmap 函数并将输出记录到桌面上的 txt 文件中。我还没有自己写这一切,因为我仍然只学习python。我找到了一个用于更新回溯的更新脚本,并将其用作缩进和命令的模板,并对其进行了修改并添加了一些我自己的东西来满足我的需求。

我遇到的问题是这个块

def nmap_target():


    try:    ip = raw_input(" [>] Enter ip to scan:  ")

except KeyboardInterrupt:
    print "\n [>] Exiting!\n"
            sleep(1)
    sys.exit()
    print " [>] Attempting targeted scan.\n"
    #print ip 
if subprocess.Popen("nmap ip >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt",shell=True).wait() == 0:
    print "\n"
    print " [>] Targeted scan completed successfully!\n"
            menu_main()

else:
    print "\n"
    print " [>] Nmap scan failed.\n"

它背后的想法是它要求用户在 raw_input() 中输入一个 IP 地址并将其称为 ip,然后我尝试使用 subprocess.Popen("nmap ip 将其传递给 nmap,如上所示。问题它只是写nmap ip而不是打印ip地址然后返回错误,它甚至试图扫描我的网络,每次我测试它时,我都会确保互联网电缆从我的路由器上拔下,这会导致我的错误互联网测试,所以如果你尝试运行下面的代码,如果你的互联网从路由器上拔下,你可能需要在 menu_main() 部分中散列 internet_check() 选项

我现在已经花了 4 天时间,这让我发疯,起初我以为我需要将数字转换为浮点数,所以我尝试了,但还是一样,我尝试了各种各样的事情,花了几个小时在互联网上拖网寻找答案无济于事。

我现在确信这不是我正在尝试的命令,我认为这是退出语句,我尝试将“print ip”放在“print” [>] 尝试目标扫描的行之后。 n" 并且确定输入的 ip 地址显示在屏幕上,这向我证明 raw_input() 正在工作。只要我将它移动到它失败的任何地方,这向我表明它必须是退出语句或缩进的问题,我不确定。我也尝试过散列键盘中断以及下面的几行,我尝试移动 try: 和 if 语句,甚至尝试了其他命令但它只是不会工作aaarrrrrgggghhhhhh

我是否认为将 ip 输入 raw_input() 然后在我可以将其传递给 subprocess.Popen("nmap ip.

就像我提到的,我没有从头开始编写这个脚本,这是我的第一个这样的项目,所以我有很多东西要学,我已经浏览了 python 手册页并查看了各种教程,但只是可以不知道这个。任何帮助都感激不尽

如果有人感兴趣,我会发布完整的脚本,只要我能弄清楚如何正确发布代码

4

2 回答 2

1

您需要将变量与字符串分开!试试这个:D

if subprocess.Popen('nmap '+ip+' >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt',shell=True).wait() == 0:

希望能帮助到你!

编辑 - 如果出于某种原因 python 将原始输入作为整数,请将其转换为字符串,如下所示:

if subprocess.Popen('nmap '+str(ip)+' >> //root/Desktop/Target.txt && tail /root/Desktop/Target.txt',shell=True).wait() == 0:

Python 不喜欢连接 str 和 int 类型,或者它会告诉我的脚本何时失败:PI 很确定您的 ip 变量将是 str 类型,所以第一个示例应该可以工作。

干杯!

于 2012-11-29T19:20:50.043 回答
1

您需要正确格式化字符串,ip否则根本不会解释字符串,即它不会被实际 IP 替换。尝试类似:

cmd = "nmap ${0} >> [....] root/Desktop/Target.txt".format(ip)
if subprocess.Popen(cmd):

您还可以使用%运算符:

cmd = "nmap %s >> [....] root/Desktop/Target.txt" % ip
于 2012-11-29T19:21:31.303 回答