从C中的用户输入扫描并格式化IP地址

时间:2015-07-25 21:52:19

标签: c ip

我想编写一个小脚本,以便更快地启动另一个程序,也因为我总是不匹配启动语法。我在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地址输入正确,请你告诉我怎么做?提前致谢

2 个答案:

答案 0 :(得分:1)

你已经制作了RHOST和ROUTER字符串数组。让它们成为char数组。请注意,您输入的字符不得超过255个 系统还将字符串作为参数,您提供3个参数。最后2个将被忽略。你将做两件事之一。将system()中的字符串连接到RHOST和ROUTER或sprintf RHOST和ROUTER连接到system()的字符串中,并将其用于system()调用。

答案 1 :(得分:1)

您声明RHOSTROUTER的方式是指向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);