用variab在python中调用nc/netcat

2024-04-29 21:57:44 发布

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

我试图从循环内部调用netcat/nc,将lcv作为命令中的最后一个八位字节传递。由于变量在命令的中间,我似乎遇到了一个问题。我想做的是:

for i in 1 to 50
   print i
   nc -nvv 192.168.1.i 21 -w 15 >> local_net.txt

到目前为止,我试过:

os.system("nc -nvv 192.168.1.",i,"21 -w 15 >> local_net.txt")

以及

subprocess.call(["nv","-nvv 192.168.1.",i,"21 -w 15 >> local_net.txt")

有没有一种更简单的方法可以从执行系统命令的命令中引用LVC?


Tags: toin命令txtfornetoslocal
1条回答
网友
1楼 · 发布于 2024-04-29 21:57:44

这不起作用的原因是:

os.system("nc -nvv 192.168.1.",i,"21 -w 15 >> local_net.txt"

…是os.system接受单个字符串作为shell命令。你给了它三个独立的论点。(另外,即使这能如您所希望的那样工作,它也必须在i之前放置一个空格,或者不在i之后放置一个空格。)您可以通过组合字符串的任何常用方法来修复它:

os.system("nc -nvv 192.168.1.{} 21 -w 15 >> local_net.txt".format(i))

os.system("nc -nvv 192.168.1." + str(i) + " 21 -w 15 >> local_net.txt".format(i))

然而,你尝试subprocess.call的直觉是好的。这不起作用的原因是:

subprocess.call(["nv","-nvv 192.168.1.",i,"21 -w 15 >> local_net.txt")

…是两倍的。

首先,你要加入多个论点。这相当于shell命令:

nc '-nvv 192.168.1.' '1' '21 -w 15 >> local_net.txt'

当你想要的与这些相等时:

nc -nvv 192.168.1.1 21 -w 15 >> local_net.txt
nc '-nvv' '192.168.1.1' '21' '-w' '15' >> 'local_net.txt'

你需要正确地分解论点才能得到答案。

其次,>> local_net.txt根本不是命令本身的一部分;它是一个shell重定向指令。没有贝壳你做不到。

如果您真的想使用shell,可以使用与使用system相同的方法,但只需将一个:

subprocess.call("nc -nvv 192.168.1.{} 21 -w 15 >> local_net.txt".format(i), shell=True)

但更好的方法是正确地分解参数,并执行重定向Python样式而不是shell样式:

with open('local_net.txt', 'a+b') as f:
    subprocess.call(["nc", "-nvv", "192.168.1.{}".format(i), "21", "-w", "15"],
                    stdout=f)

在文件模式下,a意味着追加到文件的末尾;+意味着更新文件(如果它存在的话),否则就创建它;b意味着以二进制模式打开它(因此,如果这是Windows-I,这里假设是Python 2.x,就不翻译换行)。


同时,Python版本的for i in 1 to 50for i in range(1, 51):。(注意51在末尾,因为Python范围是半开的。)因此,将其放在一起:

for i in range(50):
    with open('local_net.txt', 'a+b') as f:
        subprocess.call(["nc", "-nvv", "192.168.1.{}".format(i), "21", "-w", "15"],
                        stdout=f)

值得注意的是,您可以在大多数类似sh的shell(包括bash)中这样做,而根本不需要Python。对于这样简单的事情来说,可能更容易:

for i in {1..50}; do
    nc -nvv 192.168.1.${i} 21 -w 15 >> local_net.txt
done

相关问题 更多 >