为了更快地启动另一个程序,我想编写一个小脚本,也因为我总是与启动语法不匹配。我用C写了下面的脚本-我想我不应该解释它。它只是几个扫描输入和启动脚本。
#include <stdio.h>
int main() {
char *RHOST[256];
char *ROUTER[256];
printf("Bitte IP des Router eingeben: ");
scanf("%s",&ROUTER);
printf("Bitte IP des Opfers eingeben: ");
scanf("%s",&RHOST);
//printf("Du willst über den Router %s die Pakete von %s spoofen?\n",ROUTER,RHOST);
system("gnome-terminal -x sh -c \"mitmf --spoof --arp -i wlan0 --target %s --gateway %s --inject --html-payload \"any useful stuff\"; cat\"", RHOST, ROUTER);
}问题是,当我想启动脚本时,我会得到以下错误
Traceback (most recent call last):
File "./mitmf.py", line 113, in <module>
p.initialize(args)
File "/usr/share/mitmf/plugins/Spoof.py", line 65, in initialize
self.routermac = getmacbyip(self.gateway)
File "/usr/lib/python2.7/dist-packages/scapy/layers/l2.py", line 53, in getmacbyip
tmp = map(ord, inet_aton(ip))
socket.error: illegal IP address string passed to inet_aton我想,我的ip地址输入没有格式化,请告诉我怎么做好吗?提前感谢
发布于 2015-07-25 22:00:32
声明RHOST和ROUTER的方式是指向char的指针数组,而不是可能需要的char数组。相反,应该这样宣布:
char RHOST[256];
char ROUTER[256];在调用scanf时,%s格式字符串需要一个char *或char数组:
scanf("%s",ROUTER);而且,system函数只接受一个参数。它不做printf样式的替换。首先使用snprintf将命令组装成单独的字符串,然后将该字符串传递给system。
char command[1000];
snprintf(command, 1000, "gnome-terminal -x sh -c \"mitmf --spoof --arp -i wlan0 --target %s --gateway %s --inject --html-payload \"any useful stuff\"; cat\"", RHOST, ROUTER);
system(command);发布于 2015-07-25 22:00:06
您已经制作了RHOST和路由器字符串数组。把它们做成一排煤焦。请注意,您不能输入超过255个字符。
同时,系统使用一个字符串作为参数,您可以给出3个参数。最后两个将被忽略。你必须做两件事之一。要么将system()中的字符串部分与RHOST和路由器连接起来,要么将sprintf RHOST和路由器从system()连接到字符串中,并将其用于system()调用。
https://stackoverflow.com/questions/31631507
复制相似问题