首页 > 解决方案 > 使用 PowerShell 在 CSV 文件中执行 NMAP 命令的结果

问题描述

我想帮助在 Powershell 中编写一个脚本,该脚本仅将 nmap -sv 192.168.0.0/24 命令的 nips 放入 CSV 文件

命令输出

Starting Nmap 7.80 ( https://nmap.org ) at 2019-11-14 17:36 E. South America Standard Time
Nmap scan report for fwmatriz.niplan.com.br (192.168.0.1)
Host is up (0.00s latency).
MAC Address: 00:1A:8C:5C:7A:9C (Sophos)
Nmap scan report for npespsql01.niplan.com.br (192.168.0.2)
Host is up (0.00s latency).
MAC Address: 80:C1:6E:62:06:00 (Hewlett Packard)
Nmap scan report for npespntpdc.niplan.com.br (192.168.0.3)
Host is up (0.00s latency).
MAC Address: 00:26:B9:4F:8A:27 (Dell)
Nmap scan report for npespdc06.niplan.com.br (192.168.0.4)
Host is up (0.00s latency).
MAC Address: D4:AE:52:70:7A:F3 (Dell)
Nmap scan report for npespntorc.niplan.com.br (192.168.0.5)
Host is up (0.00s latency).
MAC Address: 00:0C:29:F4:19:CC (VMware)
Nmap scan report for npespntfs01.niplan.com.br (192.168.0.6)

我想得到一个这样的 CSV 文件:

npespsql01
npespntpdc
npespdc06
npespntorc
npespntfs01

谢谢

标签: powershellnmap

解决方案


您可以执行以下操作:

(nmap -sv 192.168.0.0/24 | Select-String -Pattern '\S+(?=\.niplan\.com)').Matches.Value

Set-Content您可以使用或将其通过管道传输到文件Out-File。如果要创建 CSV 文件,则需要先输出具有命名属性的对象。将字符串集合发送到Export-Csv将只得到字符串的长度,因为这是字符串对象的唯一命名属性。下面是创建计算属性的示例,该属性使用与命令NIPS匹配的值命名。nmap

(nmap -sv 192.168.0.0/24 | Select-String -Pattern '\S+(?=\.niplan\.com)').Matches.Value |
    Select-Object @{Name='NIPS';Expression={$_}} |
        Export-Csv 'file.csv' -NoType

除非使用开关,否则-Patternin Select-String使用正则表达式模式匹配。-SimpleMatch如果您的反向名称无法解析到niplan.com.br域,则可能需要对其进行调整。您可以改为执行以下操作,它将匹配所有字符,直到文本.之后的第一个Nmap scan report for字符。

Select-String -pattern '(?<=Nmap scan report for )[^\.]+'

推荐阅读