簡體   English   中英

用變量在python中調用nc / netcat

[英]Calling nc/netcat in python with variable

我試圖從循環內部調用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?

這不起作用的原因:

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重定向指令。 沒有外殼,您將無法做到這一點。

如果您真的想使用外殼程序,則可以使用與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,則不要翻譯換行符-我在這里假設使用Python 2.x)。


同時, for i in 1 to 50for i in range(1, 51):的Python版本for i in 1 to 50 for 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM