我目前正在学习渗透测试和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
如果我在Python中使用print
并在终端中运行它,是否会像你自己输入并按下Enter一样执行它?
你可以使用os.system()
,像这样。
import os
os.system('ls')
或者在你的案例中。
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')
更好的是,你可以使用subprocess'的调用,它更安全、更强大,而且可能更快。
from subprocess import call
call('echo "I like potatos"', shell=True)
或者,不调用shell。
call(['echo', 'I like potatos'])
如果你想捕获输出,一种方法是这样的。
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))
我*强烈建议在 "communicate "中设置一个 "timeout",同时也要捕捉调用它时可能出现的异常。这是一个非常容易出错的代码,所以你应该预期会有错误发生,并对其进行相应处理。
第一条命令只是写到一个文件。你不会把它作为一个shell命令来执行,因为python
可以在没有shell的帮助下读写文件。
with open('/proc/sys/net/ipv4/ip_forward', 'w') as f:
f.write("1")
iptables "命令是你可能想在外部执行的。最好的方法是使用[子进程模块](https://docs.python.org/2/library/subprocess.html)。
import subprocess
subprocess.check_call(['iptables', '-t', 'nat', '-A',
'PREROUTING', '-p', 'tcp',
'--destination-port', '80',
'-j', 'REDIRECT', '--to-port', '8080'])
注意,这种方法也不使用shell,这是不必要的开销。