我目前正在学习渗透测试和 Python 编程。我只想知道如何在 Python 中执行 Linux 命令。我要执行的命令是:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
Run Code Online (Sandbox Code Playgroud)
如果我只是print
在 Python 中使用并在终端中运行它,它会像执行它一样执行它,就像您自己输入并按 一样Enter吗?
Kir*_*ira 127
你可以使用os.system()
,像这样:
import os
os.system('ls')
Run Code Online (Sandbox Code Playgroud)
或者在你的情况下:
os.system('echo 1 > /proc/sys/net/ipv4/ip_forward')
os.system('iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080')
Run Code Online (Sandbox Code Playgroud)
更好的是,您可以使用子进程的调用,它更安全、更强大并且可能更快:
from subprocess import call
call('echo "I like potatos"', shell=True)
Run Code Online (Sandbox Code Playgroud)
或者,不调用 shell:
call(['echo', 'I like potatos'])
Run Code Online (Sandbox Code Playgroud)
如果要捕获输出,一种方法是这样的:
import subprocess
cmd = ['echo', 'I like potatos']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
o, e = proc.communicate()
print('Output: ' + o.decode('ascii'))
print('Error: ' + e.decode('ascii'))
print('code: ' + str(proc.returncode))
Run Code Online (Sandbox Code Playgroud)
我强烈建议设置一个timeout
in communicate
,并捕获调用它时可以获得的异常。这是一个非常容易出错的代码,因此您应该预期会发生错误并相应地处理它们。
https://docs.python.org/3/library/subprocess.html
jor*_*anm 32
第一个命令只是写入文件。您不会将其作为 shell 命令执行,因为python
可以在没有 shell 帮助的情况下读取和写入文件:
with open('/proc/sys/net/ipv4/ip_forward', 'w') as f:
f.write("1")
Run Code Online (Sandbox Code Playgroud)
该iptables
命令是您可能想要在外部执行的内容。最好的方法是使用subprocess 模块。
import subprocess
subprocess.check_call(['iptables', '-t', 'nat', '-A',
'PREROUTING', '-p', 'tcp',
'--destination-port', '80',
'-j', 'REDIRECT', '--to-port', '8080'])
Run Code Online (Sandbox Code Playgroud)
请注意,此方法也不使用外壳,这是不必要的开销。
Tom*_*unt 13
最快的方法:
import os
os.system("your command here")
Run Code Online (Sandbox Code Playgroud)
这不是最灵活的方法;如果您需要对流程进行更多控制而不是“运行一次,完成,然后阻塞直到退出”,那么您应该改用该subprocess
模块。
作为一般规则,您最好尽可能使用 python 绑定(更好的异常捕获,以及其他优点。)
对于echo
命令,按照@jordanm 的回答中的建议,使用 python 在文件中写入显然更好。
对于iptables
命令,也许python-iptables
(PyPi 页面,带有描述和文档的 GitHub 页面)会提供您需要的内容(我没有检查您的特定命令)。
这将使您依赖外部库,因此您必须权衡好处。使用 subprocess 是可行的,但是如果您想使用输出,则必须自己解析它,并在未来iptables
版本中处理输出更改。
归档时间: |
|
查看次数: |
644560 次 |
最近记录: |