我只想打印给定 gnmap 文件中的 IP 地址和打开端口字段。
主机:123.123.123.123() 端口:80/open/tcp//http?///, 443/open/tcp//https?///, 8083/closed/tcp//us-srv///, 65001 /closed/tcp///// 忽略状态:过滤(65531) 序列索引:262 IP ID 序列:随机 主机:123.123.123.124() 端口:80/open/tcp//http?///, 443/open/tcp//https?///, 10443/open/tcp//https///, 65001/close /tcp///// 忽略状态:过滤 (65531) 序列索引:262 IP ID 序列:随机 主机:123.123.123.125 () 端口:80/open/tcp//http?///, 443/open/tcp//https?///, 8083/closed/tcp//us-srv///, 8445 /open/tcp//https///, 65001/closed/tcp///// 忽略状态:过滤(65531) Seq Index:262 IP ID Seq:随机 主机:123.123.123.126 () 端口:1337/open/tcp//https?///, 8083/closed/tcp//us-srv///, 65001/closed/tcp///// 忽略状态:已过滤(65531) 序列索引:262 IP ID 序列:随机
预期输出为
123.123.123.123 80/open/tcp//http?///, 443/open/tcp//https?/// 123.123.123.124 80/open/tcp//http?///, 443/open/tcp//https?///, 10443/open/tcp//https/// 123.123.123.125 80/open/tcp//http?///, 443/open/tcp//https?///
我已经尝试了许多不同的命令,其中之一是下面的命令。
cat targets_osdetection.gnmap | awk '/open/{print $2 " " $5 " "$6 " " $7}'
但它只打印与 $Number 字段对应的字段,并且由于每个 IP 可能没有相同数量的开放端口,因此该命令效率不高。
有人可以为此提供 awk 解决方案吗?
解释:
如果
/open/
匹配该行:$2
使用 IP ( )创建一个变量$3
-如果匹配NF
,则将字段添加到变量中。/open/
由于您有一个静态文件格式
sed
替换也可以完成这项工作:输出: