我在Kali Linux上做了一个项目,在那里我运行Ettercap工具,它列出了网络上的IP地址并将它们保存到一个.txt文件中。然后我需要在另一个工具nmap上使用这些IP,所以我想编写一个C代码,可以将IP.txt中的IP保存到一个数组中。到目前为止,这是最接近的工作代码:从文件读取数据到数组 - C
#include <stdio.h>
#include <stdlib.h>
main(){
FILE *ipList;
ipList = fopen("IP.txt", "r");
int ipArray[10];
int i;
if (ipList == NULL)
{
printf("Error\n");
exit (0);
}
for (i = 0; i < 10; i++)
{
fscanf(ipList, "%d,", &ipArray[i]);
}
for (i = 0; i < 10; i++)
{
printf("nmap -A -T4 -F %d\n\n", ipArray[i]);
}
fclose(ipList);
return 0;
}
结果输出只是一堆随机数。有任何想法吗?我使用卡莉有什么关系吗?我的ipArray设置为10;如果我没有10个IP地址,会不会成为问题?
的IP地址存储这样的:
IP地址:10.0.0.1
IP地址:10.0.0.2
IP地址:10.0.0.3
IP地址:10.0.0.4
我已经取得了进展。这是我目前的输出:
nmap -A -T4 -F IP | nnmap -A -T4 -F地址| nnmap -A -T4 -F:| nnmap -A -T4 -F 10.0.2.2 | nnmap -A -T4 -F IP | nnmap -A -T4 -F地址| nnmap -A -T4 -F:| nnmap -A -T4 -F 10.0.2.3 | nnmap -A -T4 -F IP | nnmap -A - T4 -F地址| NNMAP -A -T4 -F:| NNMAP -A -T4 -F 10.0.2.4
这里是我当前的代码:
#include <stdio.h>
#include <stdlib.h>
main() {
FILE *ipList;
ipList = fopen("IP.txt","r");
char ip_addr[256];
while (fscanf(ipList, "%255s", ip_addr) == 1){
printf("nmap -A -T4 -F %s|n", ip_addr);
}
if (ipList == NULL){
printf("error\n");
exit (1);
}
fclose(ipList);
return 0;
}
所以,现在我的目标是让代码忽略“IP地址:”,如果可能,将其输出为列表。
你不从'的fscanf检查返回值()'所以,你不知道它是否认为它能够从输入读取一个整数。你永远不会知道这个逗号是否匹配,这可能没有关系。您的错误信息应打印在标准错误('stderr')上,而不是标准输出中。你的错误出口可能应该是'1'或'EXIT_FAILURE'而不是'0',表示成功。您使用Kali Linux的事实几乎肯定是完全无关紧要的。你的代码完全是标准的C,除了你应该有一个明确的返回类型:'int main()'。 –
我可以添加到@ JonathanLeffler的评论的唯一的事情是,你似乎混淆了'%d'(和'int')代表IP地址的一些不存在的格式说明符(和类型),你应该使用'%s'(对应一个'char'数组,而不是一个指向'int'的指针)来处理这个输入作为字符串, while(fscanf(ipList,“%255s”,ip_addr)== 1){printf(“nmap -A -T4 -F%s \ n”,ip_addr); }' – Sebivor
@undefinedbehaviour:好点。但是,如果IP地址用逗号分隔,那么可能需要“%255 [^,],”。 –