我在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 [^,],」。 –