我正在尝试编写一个bash脚本来简化收集IP信息的过程。 现在我已经创建了一个脚本,它运行在多个文件中的一列IP地址,查找地理和主机信息并将其存储到新文件中。
还有一个好处是有一个脚本可以从3列的文件生成结果 - 日期,时间,IP地址。分隔符就是空间。 我试过这个,但没有。我是一个新手:)
这是我原来的剧本:
#!/usr/bin/env bash
find *.txt -print0 | while read -d $'\0' file;
do
for i in $( cat "$file")
do echo -e "$i,"$( geoiplookup -f "/usr/share/GeoIP/GeoLiteCity.dat" $i | cut -d' ' -f6,8-9)" "$(nslookup $i | grep name | awk '{print $4}')"" >> "res/res-"$file".txt";
done
done
输入文件示例
2014-03-06 12:13:27 213.102.145.172
2014-03-06 12:18:24 83.177.253.118
2014-03-25 15:42:01 213.102.155.173
2014-03-25 15:55:47 213.101.185.223
2014-03-26 15:21:43 90.130.182.2
你可以帮我解决这个问题吗?
答案 0 :(得分:0)
目前的代码尝试做的并不完全清楚,但这是一个有希望有用的重构,至少可以作为一个起点。
#!/usr/bin/env bash
find *.txt -print0 | while read -d $'\0' file;
do
while read date time ip; do
geo=$(geoiplookup -f "/usr/share/GeoIP/GeoLiteCity.dat" "$ip" |
cut -d' ' -f6,8-9)
addr=$(nslookup "$ip" | awk '/name/ {print $4}')
#addr=$(dig +short -x "$ip")
echo "$ip $geo $addr"
done <"$file" >"res/res-$file.txt"
done
我的nslookup
副本没有输出四个字段,但我认为你的部分脚本是正确的。 dig +short
的输出更适合机器处理,因此可能改用它。也许geoiplookup
也提供输出机器可读结果的选项,或者可能有替代接口。
我认为你的脚本输出部分以逗号分隔的,部分以空格分隔的结果是错误的,所以我也改了。如果您打算让其他工具能够读取此输出,也许您应该使用CSV或JSON。
尝试生成名为res/res-$file.txt
的文件只有在file
不在任何子目录中时才有效,所以我猜你要用basename
修复它;或者,find
循环应该替换为简单的for file in *.txt
。