从文件读取数据到数组 - C

时间:2015-04-26 04:16:15

标签: c arrays scanf

我在Kali Linux上做了一个项目,在那里我运行了工具Ettercap,它列出了网络上的IP地址并将它们保存到.txt。然后我需要在另一个工具nmap上使用这些IP,所以我想编写一个可以将IP从IP.txt保存到数组中的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;
}

结果输出只是一堆随机数。有任何想法吗?我使用Kali是否重要?我的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;

}

所以现在我的目标是让代码忽略&#34; IP地址:&#34;如果可能的话,将其作为列表输出。

1 个答案:

答案 0 :(得分:1)

鉴于输入格式是如下行:

IP address : 10.0.0.1

然后你需要将地址作为字符串读取,或者作为4个单独的小整数读取。

char *ip_address[16];

for (i = 0; i < 10; i++)
{
    if (fscanf(fp, "IP address : %15s", ip_address) != 1)
        …report format error…
    …code to convert dotted-decimal to IPv4 address…
}

或:

int ip[4];

for (i = 0; i < 10; i++)
{
    if (fscanf(fp, "IP address : %d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3]) != 4)
        …report format error…
    for (j = 0; j < 4; j++)
    {
        if (ip[j] < 0 || ip[j] > 255)
            …report bogus value…
    }
    …convert dotted-decimal values into IPv4 address…
}