2017-07-02 63 views
0

我做了使用nmap工作再上一个IP地址范围内的所有设备及其MAC地址的脚本。我想为每个设备创建一个文件,如IPaddress_macaddress。 我做到了这一点,但我不知道如何动态创建文件。Nmap的庆典动态创建文件

sudo nmap -n -sP 192.168.1.* | 
awk '/Nmap scan report/{printf $5;printf " ";getline;getline;printf $3;}' > file.txt 

这将打印在file.txt的:

192.168.1.10 DC:EX:03:0S:4B:31 
192.168.1.11 A4:2G:8C:E8:5A:65 
192.168.1.32 9C:80:GF:J0:53:6F 
192.168.1.23 64:7C:54:CC:SD:C4 
192.168.1.77 256 

这个文件的格式是

ipaddress macaddress 

我想解析文件创建为每个符合一个新的文件每行内容的名称,在ipaddress和macaddress之间添加一个下划线。对应于ipaddress_macaddress.txt

所以,对于file.txt的,有剧本,我想它来创建 192.168.1.10_DC:EX:03:0S:4B:31.txt

我不知道我该怎么解析它智能

+1

你不能只是将输出重定向到一个文件,例如通过添加>文件名 –

+0

@RamanSailopal是的我可以很容易地重定向到一个文件的输出,但我怎么能解析它很容易保存ips和mac值? – Michael003

+1

您在寻求帮助来编写awk脚本,将某些输入文本转换为某些输出文本,以便您必须向我们展示该输入和输出的外观。 [编辑]你的问题,包括一个简洁,可测试的样本输入(即你的'nmap'命令的输出)[mcve]和给定输入的期望输出。如果所需的输出是多个文件,听起来可能是这样,那么显然会向我们展示至少两个输出文件及其内容。正确的答案不会使用getline btw,请参阅http://awk.freeshell.org/AllAboutGetline,并且从不执​​行'printf $ '。 –

回答

1
$ ls 
file 

$ while read ip mac; do touch ${ip}_${mac}.txt; done < file 

$ ls 
192.168.1.10_DC:EX:03:0S:4B:31.txt 192.168.1.23_64:7C:54:CC:SD:C4.txt 192.168.1.77_256.txt 
192.168.1.11_A4:2G:8C:E8:5A:65.txt 192.168.1.32_9C:80:GF:J0:53:6F.txt file 
1

作为一个awk onliner你可以这样做:

nmap -n -sP 192.168.1.* | awk '{ if ($0 ~ /Nmap scan/) { ip=$5 } if ($0 ~ /MAC/) { mac=$3;det[mac]=ip } } END { for (i in det) { system("echo \""i" "det[i]"\" > "i"_"det[i]".txt") } }' 

这将从nmap获取输出,然后搜索“Nmap scan”,并将ip地址放在变量ip中,然后将MAC地址放在mac中。然后用ip地址和MAC地址创建一个数组。然后循环,并使用awk系统函数创建具有ip和MAC地址的文件。