Skip to content

Instantly share code, notes, and snippets.

@mbrownnycnyc
Last active October 19, 2018 14:47
Show Gist options
  • Save mbrownnycnyc/315f5b0e7723634e94280299145364d2 to your computer and use it in GitHub Desktop.
Save mbrownnycnyc/315f5b0e7723634e94280299145364d2 to your computer and use it in GitHub Desktop.
nmap XML to CSV converter that I did not write!
# I did not write this.
# This allows for a quick view over nmap results via Excel, etc.
# tested with -sV and -A result XMLs, processing the --script results somewhat
function convertnmapxmlto-csv {
[CmdletBinding()]
param (
[string]$csvOutput,
[object[]]$xmlFiles
)
$FinalData = @()
$ID = 1
ForEach($File in $xmlFiles){
write-verbose $File
[xml]$CurrFile = Get-Content $File
$HostEntries = $CurrFile.nmaprun.host
ForEach ($HostInfo in $HostEntries){
$FQDN = $HostInfo.hostnames.hostname.name
$Status = $HostInfo.status
$HostState = $Status.state
$HostReason = $Status.reason
$HostReasonTTL = $Status.reason_ttl
$Address = $HostInfo.address
$IPfour = ''
$IPsix = ''
if ($Address.addrtype -eq 'ipv4'){
$IPfour = $Address.addr
} elseif ($Address.addrtype -eq 'ipv6'){
$IPsix = $Address.addr
}
if (([String]::IsNullOrEmpty($HostInfo.ports.port)) -And ([String]::IsNullOrEmpty($HostInfo.os)) -And ([String]::IsNullOrEmpty($HostInfo.trace))){
$CurrData = New-Object -TypeName PSObject
$CurrData | Add-Member -Name "FQDN" -MemberType NoteProperty -Value $FQDN
$CurrData | Add-Member -Name "hostState" -MemberType NoteProperty -Value $HostState
$CurrData | Add-Member -Name "hostReason" -MemberType NoteProperty -Value $HostReason
$CurrData | Add-Member -Name "hostReasonTTL" -MemberType NoteProperty -Value $HostReasonTTL
$CurrData | Add-Member -Name "IPv4" -MemberType NoteProperty -Value $IPfour
$CurrData | Add-Member -Name "IPv6" -MemberType NoteProperty -Value $IPsix
$CurrData | Add-Member -Name "Protocol" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portNumber" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portReason" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portReasonTTL" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceName" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceProduct" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceVersion" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceMethod" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceConfidence" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceCPEFields" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osName" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osMatchAccuracy" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osType" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osVendor" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osFamily" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osGen" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osClassAccuracy" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osCPEFields" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceLastHop" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceTTL" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceFrom" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceTo" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceRTT" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceHost" -MemberType NoteProperty -Value ''
$FinalData += $CurrData
continue
}
$Ports = $HostInfo.ports
ForEach($Port in $Ports.port){
$Protocol = $Port.protocol
$PortNo = $Port.portid
$PortReason = $Port.state.reason
$PortReasonTTL = $Port.state.reason_ttl
$ServiceName = $Port.service.name
$ServiceProduct = $Port.service.product
$ServiceVersion = $Port.service.version
$ServiceMethod = $Port.service.method
$ServiceConfidence = ([int]$Port.service.conf * 10)
$CpeFields = ''
Try{
ForEach($Cpe in $Port.service.cpe){
if ([String]::IsNullOrEmpty($CpeFields)){
$CpeFields = $Cpe
} else{
$CpeFields = ($CpeFields + ', ' + $Cpe)
}
}
} Catch{}
$CurrData = New-Object -TypeName PSObject
$CurrData | Add-Member -Name "FQDN" -MemberType NoteProperty -Value $FQDN
$CurrData | Add-Member -Name "hostState" -MemberType NoteProperty -Value $HostState
$CurrData | Add-Member -Name "hostReason" -MemberType NoteProperty -Value $HostReason
$CurrData | Add-Member -Name "hostReasonTTL" -MemberType NoteProperty -Value $HostReasonTTL
$CurrData | Add-Member -Name "IPv4" -MemberType NoteProperty -Value $IPfour
$CurrData | Add-Member -Name "IPv6" -MemberType NoteProperty -Value $IPsix
$CurrData | Add-Member -Name "Protocol" -MemberType NoteProperty -Value $Protocol
$CurrData | Add-Member -Name "portNumber" -MemberType NoteProperty -Value $PortNo
$CurrData | Add-Member -Name "portReason" -MemberType NoteProperty -Value $PortReason
$CurrData | Add-Member -Name "portReasonTTL" -MemberType NoteProperty -Value $PortReasonTTL
$CurrData | Add-Member -Name "serviceName" -MemberType NoteProperty -Value $ServiceName
$CurrData | Add-Member -Name "serviceProduct" -MemberType NoteProperty -Value $ServiceProduct
$CurrData | Add-Member -Name "serviceVersion" -MemberType NoteProperty -Value $ServiceVersion
$CurrData | Add-Member -Name "serviceMethod" -MemberType NoteProperty -Value $ServiceMethod
$CurrData | Add-Member -Name "serviceConfidence" -MemberType NoteProperty -Value $ServiceConfidence
$CurrData | Add-Member -Name "serviceCPEFields" -MemberType NoteProperty -Value $CpeFields
$CurrData | Add-Member -Name "osName" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osMatchAccuracy" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osType" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osVendor" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osFamily" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osGen" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osClassAccuracy" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osCPEFields" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceLastHop" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceTTL" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceFrom" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceTo" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceRTT" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceHost" -MemberType NoteProperty -Value ''
$FinalData += $CurrData
}
$OSInfo = $HostInfo.os
ForEach($OS in $OSInfo.osmatch){
$OSName = $OS.name
$OSMatchAccuracy = $OS.accuracy
ForEach ($OSClass in $OS.osclass){
$OSClassCPEFields = ''
Try{
ForEach($Cpe in $OSClass.cpe){
if ([String]::IsNullOrEmpty($OSClassCPEFields)){
$OSClassCPEFields = $Cpe
} else{
$OSClassCPEFields = ($OSClassCPEFields + ', ' + $Cpe)
}
}
} Catch{}
$CurrData = New-Object -TypeName PSObject
$CurrData | Add-Member -Name "FQDN" -MemberType NoteProperty -Value $FQDN
$CurrData | Add-Member -Name "hostState" -MemberType NoteProperty -Value $HostState
$CurrData | Add-Member -Name "hostReason" -MemberType NoteProperty -Value $HostReason
$CurrData | Add-Member -Name "hostReasonTTL" -MemberType NoteProperty -Value $HostReasonTTL
$CurrData | Add-Member -Name "IPv4" -MemberType NoteProperty -Value $IPfour
$CurrData | Add-Member -Name "IPv6" -MemberType NoteProperty -Value $IPsix
$CurrData | Add-Member -Name "Protocol" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portNumber" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portReason" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portReasonTTL" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceName" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceProduct" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceVersion" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceMethod" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceConfidence" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceCPEFields" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osName" -MemberType NoteProperty -Value $OSName
$CurrData | Add-Member -Name "osMatchAccuracy" -MemberType NoteProperty -Value $OSMatchAccuracy
$CurrData | Add-Member -Name "osType" -MemberType NoteProperty -Value $OSClass.'type'
$CurrData | Add-Member -Name "osVendor" -MemberType NoteProperty -Value $OSClass.vendor
$CurrData | Add-Member -Name "osFamily" -MemberType NoteProperty -Value $OSClass.osfamily
$CurrData | Add-Member -Name "osGen" -MemberType NoteProperty -Value $OSClass.osgen
$CurrData | Add-Member -Name "osClassAccuracy" -MemberType NoteProperty -Value $OSClass.accuracy
$CurrData | Add-Member -Name "osCPEFields" -MemberType NoteProperty -Value $OSClassCPEFields
$CurrData | Add-Member -Name "traceLastHop" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceTTL" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceFrom" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceTo" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceRTT" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "traceHost" -MemberType NoteProperty -Value ''
$FinalData += $CurrData
}
}
$TraceFrom = ''
$Count = 1
$TraceInfo = $HostInfo.trace.hop
ForEach($Hop in $TraceInfo){
$CurrData = New-Object -TypeName PSObject
$CurrData | Add-Member -Name "FQDN" -MemberType NoteProperty -Value $FQDN
$CurrData | Add-Member -Name "hostState" -MemberType NoteProperty -Value $HostState
$CurrData | Add-Member -Name "hostReason" -MemberType NoteProperty -Value $HostReason
$CurrData | Add-Member -Name "hostReasonTTL" -MemberType NoteProperty -Value $HostReasonTTL
$CurrData | Add-Member -Name "IPv4" -MemberType NoteProperty -Value $IPfour
$CurrData | Add-Member -Name "IPv6" -MemberType NoteProperty -Value $IPsix
$CurrData | Add-Member -Name "Protocol" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portNumber" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portReason" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "portReasonTTL" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceName" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceProduct" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceVersion" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceMethod" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceConfidence" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "serviceCPEFields" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osName" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osMatchAccuracy" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osType" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osVendor" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osFamily" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osGen" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osClassAccuracy" -MemberType NoteProperty -Value ''
$CurrData | Add-Member -Name "osCPEFields" -MemberType NoteProperty -Value ''
if ($Count -eq $TraceInfo.Count){
$CurrData | Add-Member -Name "traceLastHop" -MemberType NoteProperty -Value '1'
} else{
$CurrData | Add-Member -Name "traceLastHop" -MemberType NoteProperty -Value '0'
}
$CurrData | Add-Member -Name "traceTTL" -MemberType NoteProperty -Value $Hop.ttl
$CurrData | Add-Member -Name "traceFrom" -MemberType NoteProperty -Value $TraceFrom
$CurrData | Add-Member -Name "traceTo" -MemberType NoteProperty -Value $Hop.ipaddr
$CurrData | Add-Member -Name "traceRTT" -MemberType NoteProperty -Value $Hop.rtt
$CurrData | Add-Member -Name "traceHost" -MemberType NoteProperty -Value $Hop.host
$FinalData += $CurrData
$TraceFrom = $Hop.ipaddr
$Count += 1
}
}
}
return $finaldata
}
function main {
$csvoutput = "C:\Users\Matt\_target_sV_A.csv"
[object[]]$xmlFiles = dir -file "C:\Users\Matt\nmap_results\_target_sV_A.xml"
$VerbosePreference = "continue"
$finaldata = convertnmapxmlto-csv -csvOutput $csvOutput -xmlFiles $xmlFiles
$finaldata | ConvertTo-CSV -NoTypeInformation | Set-Content $csvOutput
}
. main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment