![对于使用 PowerShell 和/或 Perl 的 Windows 计算机,需要与 nmap、awk 和 grep 等效的命令](https://linux22.com/image/608559/%E5%AF%B9%E4%BA%8E%E4%BD%BF%E7%94%A8%20PowerShell%20%E5%92%8C%2F%E6%88%96%20Perl%20%E7%9A%84%20Windows%20%E8%AE%A1%E7%AE%97%E6%9C%BA%EF%BC%8C%E9%9C%80%E8%A6%81%E4%B8%8E%20nmap%E3%80%81awk%20%E5%92%8C%20grep%20%E7%AD%89%E6%95%88%E7%9A%84%E5%91%BD%E4%BB%A4.png)
请参阅此主题以供参考
如何使用 nmap 和 Zenmap 扫描以特定字符串开头的所有主机名?
上述线程中的一个答案使用了以下查询(对于该命令,我完全不承担任何责任):
nmap -sL -oG - 192.168.0.0/24 | awk'$3~/^(org/{print $2}'| nmap -iL -`
它扫描所有节点以以下名称开头的主机名组织并返回匹配节点的列表。
它在 Unix/Linux 环境中运行良好,但我需要一个适用于 Windows 的等效程序。我宁愿不使用适用于 Windows 的 awk、sed 或 grep 包。我想维护一个标准并使用 PowerShell 和/或 Perl。
是否有使用 PowerShell 和/或 Perl 以及 nmap 构建此查询的等效方法?
答案1
该命令的 Nmap 部分应该工作相同。要将awk
命令转换为 Perl,请使用:
perl -lane "print $F[1] if $F[2]=~/^\(org/"
(由于 Windows cmd.exe 与大多数 *nix shell 之间的引用差异,*nix shell 应该使用单引号而不是双引号)
要在 PowerShell 中执行相同操作,这应该可行(未经测试):
%{ if ($_.Split()[2] -match "^\(org") { $_.Split()[1]; } }