viernes, 25 de mayo de 2018

Generando un Script de consulta de IP PowerShell para resolver las IP conectadas

Bueno primero tenemos que habilitar la ejecución de script de Powershell:
Verificamos como esta la política:
PS D:\> Get-ExecutionPolicy
Restricted (Resultado, significa que tenemos bloqueada esta política)

Cambios el acceso para que sea sin restricciones:
PS D:\> Set-ExecutionPolicy Unrestricted

Esta política cambia para todos los usuarios, puede ser que te de problemas, entonces debemos aplicarlo solo al usuario actual:

PS D:\> Set-ExecutionPolicy -Scope CurrentUser Unrestricted

Ahora para crear un Script tenemos que conocer algunos comandos importantes:
Foreach, recorre una array, informacion sobre loops
if(p1 -ne p2), condicional que evalua que p1 sea diferente a p2
Para conocer mas operadores de comparacion utilizar el siguiente enlace
if(p1 -And p2), condicional que evalua p1 and p2, también se puede usar -Or
try{}catch{}, ejecuta un proceso y se ocurre un error lo envía a catch
Para conocer como manipular variables y array siguiente enlace

Vamos a utilizar la función Get-NetTCPConnection, mas información
PS D:\> Get-NetTCPConnection
Esta función devolverá todas las conexiones TCP que tiene su equipo, la información mostrada es básica, existe mas información que nos puede mostrar, el siguiente comando da mas detalle:
Get-NetTCPConnection | Format-List -Property *

Para mostrar la informacion en columnas se tiene que exportar al excel, el siguiente comando permite eso:
Get-NetTCPConnection | Export-Csv -Path "data.csv"

Para poder filtrar solo tenemos que seleccionar una columna e indicar el valor del filtro:
PS D:\> Get-NetTCPConnection -RemotePort 443

Para personalizar la cantidad de columnas que va a tener se puede hacer con el parámetro select
PS D:\> Get-NetTCPConnection -RemotePort 443 | select RemoteAddress, RemotePort, State

Para hacer filtros puede hacer de la siguiente forma, trabajando con el nombre de los encabezados

PS D:\> Get-NetTCPConnection -RemotePort 443 |?  {($_.RemoteAddress -ne "0.0.0.0") -and ($_.RemoteAddress -ne "::")}  | select RemoteAddress, RemotePort, State



param (
  [string]$ip = $(throw "ip is required.")
 )

$ipParts = $ip.Split('.')
[array]::Reverse($ipParts)
$ipParts = [string]::Join('.', $ipParts)

Function Get-DnsEntry($iphost){
$subnetIP = Get-NetTCPConnection | Select RemoteAddress
foreach ($IPRemote in $subnetIP){
$iphost = $IPRemote.RemoteAddress
if(($iphost -ne "127.0.0.1") -And ($iphost -ne "0.0.0.0") -And ($iphost -ne "::") ){
try { [System.Net.Dns]::GetHostEntry($iphost)
}catch{
Write-Host $iphost }
}
}
}



$conecciones= Get-NetTCPConnection | ? {($_.RemoteAddress -ne "0.0.0.0") -And ($_.RemoteAddress -ne "::")} | Select-Object RemoteAddress, LocalPort, RemotePort, OwningProcess -Unique | Sort-Object -Property OwningProcess
foreach($coneccion in $conecciones) {Get-Process -PID $coneccion.OwningProcess | select ProcessName, Id, @{Name ="RemoteAddr";Expression={$coneccion.RemoteAddress}}, @{Name ="LocalPort";Expression={$coneccion.LocalPort}}}


Referencias Bibliográficas:
https://jongrassley.wordpress.com/2016/09/22/get-nettcpconnection/
https://stackoverflow.com/questions/39630404/inner-join-in-powershell-without-sql




No hay comentarios:

Publicar un comentario