Script: Revisar el cambio de IP Pública
Hoy os voy a enseñar como comprobar vuestra IP Pública desde diferentes sistemas y opciones. Lo haremos bajo Powershell, Bash o Python, y os voy a explicar cómo hacerlo con un comando y mediante Script.
Como podéis ver, en una entrada vamos a tratar temas que darían para varias entradas, pero como esto no va de cantidad, sino de calidad, vamos a ver qué podemos hacer…espero que os parezca interesante.
Lo primero que vamos a hacer es explicar qué es una IP pública…
¿Qué es una IP Pública?
Una IP Pública es la dirección que te asigna tu ISP (proveedor de internet), y que sirve para identificarte dentro de Internet cuando te conectas. Esta IP, salvo que tengas un servicio de IP fija contratado suele modificarse cada X tiempo.
Si no tienes acceso desde el exterior, para la mayoría de los mortales, es algo que es totalmente transparente, pero si tienes servicios publicados a Internet en tu red, puede ser un problema si no tienes sistema que automatice el proceso (Ejemplo: un DynDNS o parecido)
Comando Windows Powershell saber IP Pública
Para saber en Windows nuestra IP Pública podemos usar varias formas, yo os explico un par, que creo que es más que suficiente. Como veréis nos basamos en URLs que nos dan ese servicio:
1 |
Invoke-RestMethod -Uri http://checkip.amazonaws.com -Method Get |
Si lo queréis exportar a un fichero, por ejemplo:
1 |
Invoke-RestMethod -Uri http://checkip.amazonaws.com -Method Get | Out-File c:\temp\ip-publica.txt |
También podéis usar CURL, como lo haremos en Linux. Os enseño como:
1 |
PS C:\Windows\system32> curl ifconfig.me |
Comando Linux / MacOS saber IP Pública
Para saber en Linux o MacOS nuestra IP Pública podemos usar también varias formas (las posibilidades son casi infinitas):
1 |
curl -silent -L http://checkip.amazonaws.com |tail -n 1 |
Este comando funciona en Windows o Linux / MacOS
1 2 3 4 5 |
curl ifconfig.me o curl ifconfig.me/ip |
Script Powershell comprobar IP Pública
Ahora os enseño cómo llevar esto a un script de Powershell, para poder automatizarlo con una tarea programada o algo parecido. La idea es consultar periódicamente el cambio y tener un email cuando existan cambios:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# EL BLOG DE NEGU # COMPROBAR IP PUBLICA # RAUL UNZUE - 01052021 ## FECHA Y HORA $date = Get-Date -Format "dd-MM-yyyy" $hora = Get-Date -Format "HH:mm:ss" ## LOG $Logfile = "c:\temp\ip-publica.log" Start-Transcript -Path $Logfile -Append ## REVISAMOS SI EXISTE EL FICHERO TXT $ipold = Get-Content "c:\temp\ip-publica-old.txt" ## VALIDAMOS SI EXISTE if ($ipold -eq $null){ # SI NO EXISTE. Comprobar IP Pública y llevar a fichero Echo "No existe" Invoke-RestMethod -Uri http://checkip.amazonaws.com -Method Get | Out-File "c:\temp\ip-publica-old.txt" } else { # COMO EXISTE VALIDAMOS LA ACTUAL CON LA ANTIGUA Echo "El fichero ip-publica-old.txt existe" # Limpiamos los espacios en blanco y exportamos a TXT (Get-Content "c:\temp\ip-publica-old.txt") | ? {$_.trim() -ne "" } | Set-Content "c:\temp\ip-publica-old.txt" $ipold = Get-Content "c:\temp\ip-publica-old.txt" # AVERIGUAMOS LA IP ACTUAL Invoke-RestMethod -Uri http://checkip.amazonaws.com -Method Get | Out-File "c:\temp\ip-publica-actual.txt" (Get-Content "c:\temp\ip-publica-actual.txt") | ? {$_.trim() -ne "" } | Set-Content "c:\temp\ip-publica-actual.txt" $ipactual = Get-Content "c:\temp\ip-publica-actual.txt" if ($ipold -eq $ipactual) { Echo "Las IPs son iguales y no hay cambios $date - $hora" } else { Echo "No son iguales" # ACTUALIZAMOS EL FICHERO PARA LA PROXIMA VEZ Invoke-RestMethod -Uri http://checkip.amazonaws.com -Method Get | Out-File "c:\temp\ip-publica-old.txt" # ENVIO CORREO DE INFO $emailSmtpServer = "smtp.servidor.com" $emailSmtpServerPort = "587" $emailSmtpUser = "email@dominio.com" $emailSmtpPass = "Introducir-Contraseña" $emailFrom = "email@dominio.com" $emailTo = "emaildestino@dominio.com" $emailcc="emaildestino2@dominio.com" $emailMessage = New-Object System.Net.Mail.MailMessage( $emailFrom , $emailTo ) $emailMessage.cc.add($emailcc) $emailMessage.Subject = "IP PUBLICA MODIFICADA" $emailMessage.IsBodyHtml = $true #true or false depends $emailMessage.Body = "<h2>¡IP Pública ha sido modificada!</h2>" $emailMessage.Body += "Su conexión disponía de la IP <FONT SIZE=6><strong>$ipold</strong></font> y ha sido modificada por <FONT SIZE=6><strong>$ipactual</strong></font>" $emailMessage.Body += "<p>Volveremos a comprobarlo nuevamente cada hora</p>" $SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort ) $SMTPClient.EnableSsl = $False $SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass ); $SMTPClient.Send( $emailMessage ) } } # PARAR LOG Stop-Transcript |
Script Bash comprobar IP Pública
Ahora os enseño cómo hacerlo para Linux / MacOSX pero ahora con un script bash. En este caso vamos a generar un fichero con extensión SH.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
IPOLD="IP-ACTUAL" GETIP="ifconfig.me" if [ -f $IPOLD ] then if [ `cat $IPOLD` = `curl $GETIP` ] then echo "No existe cambio de IP." else curl $GETIP > $IPOLD mail -s "La IP es $GETIP" tuemail@dominio.com fi else curl $GETIP >> $IPOLD fi |
Script Bash aviso cambio IP Pública en Synology
Ahora os enseño cómo hacerlo para Synology pero ahora con un script bash. Como este trabajo ya está hecho en otros sitios, y bien hecho, os paso los enlaces originales:
FUENTE: https://elblogdelazaro.org/2021-04-05-synology-recibe-una-aviso-cuando-cambia-tu-ip-publica.html
FUENTE ORIGINAL: https://www.reddit.com/r/synology/comments/jvqdp8/dsm_alarm_if_external_ip_changes/
Script Python para checkear IP Pública
Si sois más de Python, os dejo también otro proyecto:
https://github.com/begleysm/ipwatch
Espero os parezca interesante…dejo pendiente utilizar esto en Zabbix.
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?
Me da error al enviar el correo, no consigo saber porqué.
Depende del servicio que uses. Para GMAIL, por ejemplo, tendrías que generar una contraseña de aplicación para poder usarla.