One place for hosting & domains

      Cómo usar el módulo pathlib para manipular las rutas de sistemas de archivos en Python 3


      El autor seleccionó el COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      Python 3 incluye el módulo pathlib para manipular rutas de sistemas de archivos de forma agnóstica en cualquier sistema operativo. El módulo pathlib es similar al os.path, pero pathlib ofrece una interfaz de nivel más alto, y, a menudo, más conveniente, que os.path.

      Podemos identificar archivos en una computadora con rutas jerárquicas. Por ejemplo, podemos identificar el archivo wave.txt en una computadora con esta ruta: /Users/sammy/ocean/wave.txt. Cada sistema operativo tiene una manera ligeramente distinta de representar rutas. Windows puede representar la ruta al archivo wave.txt de la siguiente manera: C:Userssammyoceanwave.txt.

      El módulo pathlib le puede resultar útil si desea a crear o mover archivos en el sistema de archivos de su programa de Python, enumerar los archivos del sistema de archivos que coincidan con una extensión o un patrón determinado o crear rutas de archivos apropiadas para el sistema operativo basadas en colecciones de cadenas sin procesar. Si bien es posible usar otras herramientas (como el módulo os.path) para realizar muchas de estas tareas, el módulo pathlib le permite realizar estas operaciones con un alto grado de legibilidad y una cantidad de código mínima.

      En este tutorial, revisaremos algunas de las maneras de usar el módulo pathlib para representar y manipular las rutas de los sistemas de archivos.

      Requisitos previos

      Para sacar el máximo provecho de este tutorial, se recomienda tener cierta familiaridad con la programación en Python 3. Puede consultar estos tutoriales para obtener la información de fondo necesaria:

      Cómo crear instancias Path

      El módulo pathlib proporciona varias clases, pero una de las más importantes es la clase Path. Las instancias de la clase Path representan una ruta a un archivo o un directorio en el sistema de archivos de nuestra computadora.

      Por ejemplo, el siguiente código inicia una instancia Path que representa una parte de la ruta a un archivo wave.txt:

      from pathlib import Path
      
      wave = Path("ocean", "wave.txt")
      print(wave)
      

      Si ejecutamos este código, obtendremos un resultado como el siguiente:

      Output

      ocean/wave.txt

      from pathlib import Path permite que la clase Path esté disponible en nuestro programa. Luego, Path("ocean", "wave.txt") crea una instancia de Path nueva. El resultado muestra que Python ha añadido el separador / adecuado del sistema operativo entre los dos componentes de la ruta que le proporcionamos: "ocean" y "wave.txt".

      Nota: Sus resultados pueden diferir ligeramente de los que se muestran como ejemplo en este tutorial en función del sistema operativo que utilice. Si utiliza Windows, por ejemplo, su resultado para este primer ejemplo puede tener este aspecto: oceanwave.txt.

      Actualmente, el objeto Path asignado a la variable wave contiene una ruta relativa. En otras palabras, ocean/wave.txt puede existir en varias ubicaciones de nuestro sistema de archivos. Por ejemplo, puede estar presente en /Users/user_1/ocean/wave.txt o /Users/user_2/research/ocean/wave.txt, pero no especificamos exactamente a cuál nos estamos refiriendo. Por el contrario, una ruta absoluta se refiere inequívocamente a una ubicación en el sistema de archivos.

      Puede usar Path.home() para obtener la ruta absoluta al directorio principal del usuario actual:

      home = Path.home()
      wave_absolute = Path(home, "ocean", "wave.txt")
      print(home)
      print(wave_absolute)
      

      Si ejecutamos este código, obtendremos un resultado similar al siguiente:

      Output

      /Users/sammy /Users/sammy/ocean/wave.txt

      Nota: Como se mencionó anteriormente, su resultado variará dependiendo de su sistema operativo. Por supuesto, su directorio principal también será distinto de /Users/sammy.

      Path.home() devuelve una instancia Path con una ruta absoluta al directorio principal del usuario actual. Luego, pasamos esta instancia de Path y las cadenas "ocean" y "wave.txt" a otro constructor de Path para crear una ruta absoluta al archivo wave.txt. El resultado indica que la primera línea es el directorio principal y la segunda, el directorio principal más ocean/wave.txt.

      Este ejemplo también ilustra una característica importante de la clase Path: el constructor Path acepta tanto cadenas como objetos preexistentes de Path.

      Analicemos con mayor detalle cómo es que el constructor Path admite tanto cadenas como de objetos de Path:

      shark = Path(Path.home(), "ocean", "animals", Path("fish", "shark.txt"))
      print(shark)
      

      Si ejecutamos este código de Python, obtendremos un resultado similar al siguiente:

      Output

      /Users/sammy/ocean/animals/fish/shark.txt

      shark es un Path a un archivo que construimos usando tanto objetos Path (Path.home() y Path("fish", "shark.txt")) como cadenas ("ocean" y "animals"). El constructor Path gestiona de forma inteligente ambos tipos de objetos y los une de forma correcta usando el separador correspondiente del sistema operativo, en este caso: /.

      Acceder a los atributos de los archivos

      Ahora que hemos aprendido a crear instancias de Path, vamos a repasar cómo puede usar esas instancias para acceder a información sobre un archivo.

      Podemos usar los atributos name y suffix para acceder a los nombres y los sufijos de archivos:

      wave = Path("ocean", "wave.txt")
      print(wave)
      print(wave.name)
      print(wave.suffix)
      

      Al ejecutar este código, obtendremos un resultado similar al siguiente:

      Output

      /Users/sammy/ocean/wave.txt wave.txt .txt

      Este resultado indica que el nombre del archivo al final de nuestra ruta es wave.txt y el sufijo de ese archivo es .txt.

      Las instancias de Path también ofrecen la función with_name, que le permite crear de forma sencilla un objeto Path nuevo con un nombre distinto:

      wave = Path("ocean", "wave.txt")
      tides = wave.with_name("tides.txt")
      print(wave)
      print(tides)
      

      Si ejecutamos este código, obtendremos un resultado similar al siguiente:

      ocean/wave.txt
      ocean/tides.txt
      

      El código, primero, construye una instancia Path que apunta a un archivo llamado wave.txt. Luego, invoca el método with_name en wave para devolver una segunda instancia Path que apunta a un archivo nuevo denominado tides.txt. La parte del directorio ocean/ de la ruta permanece intacta, por lo tanto, la ruta final queda establecida como ocean/tides.txt

      Acceder a antecesores

      A veces, resulta útil acceder a directorios que contienen una ruta determinada. Consideremos un ejemplo:

      shark = Path("ocean", "animals", "fish", "shark.txt")
      print(shark)
      print(shark.parent)
      

      Si ejecutamos este código, obtendremos un resultado similar al siguiente:

      Output

      ocean/animals/fish/shark.txt ocean/animals/fish

      El atributo parent en una instancia de Path devuelve el antecesor más inmediato de una ruta de archivos determinada. En este caso, devuelve el directorio que contiene el archivo shark.txt: ocean/animals/fish.

      Podemos acceder al atributo parent varias veces seguidas para recorrer el árbol de ancestros de un archivo determinado:

      shark = Path("ocean", "animals", "fish", "shark.txt")
      print(shark)
      print(shark.parent.parent)
      

      Si ejecutamos este código, obtendremos el siguiente resultado:

      Output

      ocean/animals/fish/shark.txt ocean/animals

      El resultado es similar al anterior, pero, ahora, hemos llegado a un nivel más alto al acceder a .parent por segunda vez. El directorio ocean/animals se encuentra dos directorios por encima de shark.txt.

      Usar Glob para enumerar archivos

      También es posible usar la clase Path para enumerar archivos usando el método glob.

      Imaginemos que tenemos una estructura de directorios similar a la siguiente:

      └── ocean
          ├── animals
          │   └── fish
          │       └── shark.txt
          ├── tides.txt
          └── wave.txt
      

      Un directorio ocean que contiene los archivos tides.txt y wave.txt. Tenemos un archivo denominado shark.txt anidado en el directorio ocean, un directorio animals y otro fish: ocean/animals/fish.

      Para enumerar todos los archivos .txt del directorio ocean, podríamos escribir lo siguiente:

      for txt_path in Path("ocean").glob("*.txt"):
          print(txt_path)
      

      Este código tendría un resultado similar al siguiente:

      Output

      ocean/wave.txt ocean/tides.txt

      El patrón glob __"*.txt" busca todos los archivos que terminan en .txt. Como el código del ejemplo ejecuta ese glob en el directorio ocean, devuelve los dos archivos .txt del directorio ocean: wave.txt y tides.txt.

      Nota: Para duplicar los resultados que se muestran en este ejemplo, copie la estructura de directorios que se ilustra aquí en su computadora.

      También podemos usar el método glob de manera recursiva. Para enumerar todos los archivos .txt del directorio ocean y todos sus subdirectorios, podemos escribir lo siguiente:

      for txt_path in Path("ocean").glob("**/*.txt"):
          print(txt_path)
      

      Al ejecutar este código, obtendríamos un resultado similar al siguiente:

      Output

      ocean/wave.txt ocean/tides.txt ocean/animals/fish/shark.txt

      La sección ** del patrón glob coincidirá con este directorio y todos sus subdirectorios de manera recursiva. Por tanto, no solo tenemos los archivos wave.txt y tides.txt en el resultado, sino que también recibimos el archivo shark.txt que estaba anidado en ocean/animals/fish.

      Calcular rutas relativas

      Podemos usar el método Path.relative_to para calcular rutas relacionadas entre sí. El método relative_to es útil cuando, por ejemplo, se desea recuperar una porción de una ruta de archivos larga.

      Analice el siguiente código:

      shark = Path("ocean", "animals", "fish", "shark.txt")
      below_ocean = shark.relative_to(Path("ocean"))
      below_animals = shark.relative_to(Path("ocean", "animals"))
      print(shark)
      print(below_ocean)
      print(below_animals)
      

      Si ejecutamos este código, obtendremos un resultado similar al siguiente:

      Output

      ocean/animals/fish/shark.txt animals/fish/shark.txt fish/shark.txt

      El método relative_to devuelve un nuevo objeto Path relacionado con el argumento determinado. En nuestro ejemplo, calculamos el Path a shark.txt en relación con el directorio ocean y, luego, en relación con los directorios ocean y animals.

      Si relative_to no puede calcular una respuesta porque le indicamos una ruta no relacionada, presenta un ValueError:

      shark = Path("ocean", "animals", "fish", "shark.txt")
      shark.relative_to(Path("unrelated", "path"))
      

      Obtendremos una excepción ValueError generada a partir de este código que será similar a la siguiente:

      Output

      Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/Python3.8/pathlib.py", line 899, in relative_to raise ValueError("{!r} does not start with {!r}" ValueError: 'ocean/animals/fish/shark.txt' does not start with 'unrelated/path'

      unrelated/path no forma parte de ocean/animals/fish/shark.txt, por lo tanto, Python no puede calcular una ruta relativa.

      Conclusión

      El módulo pathlib es un componente importante de la biblioteca estándar de Python que nos permite manipular rutas de sistemas de archivos de forma rápida en cualquier sistema operativo. En este tutorial, ha aprendido a usar algunas de las herramientas clave de pathlib para acceder a los atributos de archivos, enumerar archivos con patrones glob y desplazarse por archivos y directorios principales.

      El módulo pathlib expone clases y utilidades adicionales que no abarcamos en este tutorial. Ahora que tiene una referencia, puede usar la documentación del módulo pathlib para obtener más información sobre otras clases y utilidades disponibles.

      Si está interesado en utilizar otras bibliotecas de Python, consulte los siguientes tutoriales:



      Source link

      Cómo monitorear los anuncios y las rutas de BGP utilizando BGPalerter en Ubuntu 18.04


      El autor seleccionó el COVID-19 Relief Fund para que reciba una donación como parte del programa Write for DOnations.

      Introducción

      BGP (Protocolo de puerta de enlace de borde) es uno de los protocolos principales responsable de redirigir paquetes a través de Internet; por lo tanto, si presenta errores, se pueden producir interrupciones importantes. Por ejemplo, en 2019, un pequeño proveedor de servicios de Internet hizo una mala configuración de BGP que, lamentablemente, se propagó de manera ascendente y dejó importantes partes de Cloudflare y AWS sin conexión durante más de una hora.  Además, hace un año, se realizó un ataque a BGP para interceptar el tráfico a un proveedor de monederos de criptomonedas y robar los fondos de clientes desprevenidos.

      BGPalerter es una herramienta de monitoreo de la red de BGP de código abierto que puede proporcionar alertas en tiempo real sobre la actividad de BGP, incluso la visibilidad de rutas y los anuncios de nuevas rutas, así como actividades potencialmente nefastas, como intercepciones o fugas en las rutas. BGPalerter ingiere automáticamente la información de redireccionamiento de la red disponible públicamente, lo que significa que no necesita tener ningún nivel de acceso con privilegios ni integración en las redes que quiere controlar.

      Nota: BGPalerter ingiere automáticamente la información de redireccionamiento de la red disponible públicamente, lo que significa que no necesita tener ningún nivel de acceso con privilegios ni integración en las redes que quiere controlar. Todo el monitoreo cumple plenamente con la Ley de Uso Indebido de Computadoras (Computer Misuse Act), la Ley de Fraude y Abuso de Computadoras (Computer Fraud and Abuse Act), y otras leyes similares.  Sin embargo, se recomienda revelar de forma responsable cualquier hallazgo relevante al operador de la red afectado.

      En este tutorial, instalará y configurará BGPalerter para monitorear sus redes importantes, a fin de detectar actividades potencialmente sospechosas.

      Requisitos previos

      Para completar este tutorial, necesitará lo siguiente:

      Para cada dispositivo o red, necesitará identificar la dirección IP individual, el intervalo de la dirección IP o el número de sistema autónomo del que es parte. Esto se abarca en el paso 1.

      Una vez que tenga todo esto listo, inicie sesión en su servidor como non-root user.

      Paso 1: Identificar las redes que se quieren monitorear

      En este paso, identificará los detalles pertinentes de las redes que quiere monitorear.

      BGPalerter puede monitorear sobre la base de direcciones IP individuales o prefijos de red. También puede monitorear redes enteras sobre la base de su número de sistema autónomo (AS), que es un identificador global único de una red propiedad de una entidad administrativa en particular.

      Para encontrar esta información, puede utilizar el servicio de búsqueda IP-to-ASN de WHOIS, proporcionado por el servicio de inteligencia de amenazas Team Cymru. Se trata de un servidor de WHOIS personalizado diseñado para buscar información de dirección IP y enrutamiento de red.

      Si no tiene whois instalado, puede instalarlo usando el siguiente comando:

      • sudo apt update
      • sudo apt install whois

      Una vez que haya confirmado que whois está instalado, comience por realizar una búsqueda de la dirección IP de su propio servidor, utilizando el argumento -h para especificar un servidor personalizado:

      • whois -h whois.cymru.com your-ip-address

      Esto generará un resultado similar al siguiente, que muestra el nombre y el número de AS del que su servidor es parte. Normalmente, será el AS de su proveedor de alojamiento del servidor, por ejemplo, DigitalOcean.

      Output

      AS | IP | AS Name 14061 | your-ip-address | DIGITALOCEAN-ASN, US

      A continuación, puede realizar una búsqueda para identificar el prefijo de la red o el intervalo del que su servidor es parte. Para hacerlo, agregue el argumento -p a su solicitud:

      • whois -h whois.cymru.com " -p your-ip-address"

      El resultado será muy similar al comando anterior, pero, ahora, mostrará el prefijo de dirección IP al que pertenece la dirección IP de su servidor:

      Output

      AS | IP | BGP Prefix | AS Name 14061 | your-ip-address | 157.230.80.0/20 | DIGITALOCEAN-ASN, US

      Por último, puede buscar más detalles del AS del que forma parte su servidor, incluyendo la región geográfica y la fecha de asignación.

      Sustituya el número de AS que identificó usando los comandos anteriores. Utiliza el argumento -v para habilitar el resultado detallado, lo que garantiza que se muestren todos los detalles relevantes:

      • whois -h whois.cymru.com " -v as14061"

      El resultado mostrará más información sobre el AS:

      Output

      AS | CC | Registry | Allocated | AS Name 14061 | US | arin | 2012-09-25 | DIGITALOCEAN-ASN, US

      identificó detalles clave sobre las redes que quiere monitorear. Tome nota de estos detalles en algún lugar, ya que los necesitará más adelante. A continuación, comenzará a configurar BGPalerter.

      Paso 2: Crear un usuario sin privilegios para BGPalerter

      En este paso, creará una nueva cuenta de usuario sin privilegios para BGPalerter, dado que el programa no necesita ejecutarse con privilegios sudo/root.

      Primero, cree un usuario nuevo con contraseña deshabilitada:

      • sudo adduser --disabled-password bgpalerter

      No necesita configurar una contraseña o una clave de SSH, dado que solo utilizará este usuario como una cuenta de servicio para ejecutar/mantener BGPalerter.

      Inicie sesión con el usuario nuevo utilizando su:

      Ahora, está conectado con su usuario nuevo:

      bgpalerter@droplet:/home/user$
      

      Utilice el comando cd para dirigirse al directorio de inicio de su usuario nuevo:

      bgpalerter@droplet:/home/user$ cd
      bgpalerter@droplet:~$
      

      Creó un usuario sin privilegios nuevo para BGPalerter. A continuación, instalará y configurará BGPalerter en su sistema.

      Paso 3: Instalar y configurar BGPalerter

      En este paso, instalará y configurará BGPalerter. Asegúrese de seguir conectado con su usuario sin privilegios nuevo.

      Primero, debe identificar la última versión de BGPalerter, a fin de asegurarse de descargar la más reciente. Diríjase a la página de Lanzamientos de BGPalerter y copie el enlace de descarga de la versión de Linux x64 más reciente.

      Ahora, puede descargar una copia de BGPalerter usando wget, asegurándose de sustituir el enlace de descarga correcto:

      • wget https://github.com/nttgin/BGPalerter/releases/download/v1.24.0/bgpalerter-linux-x64

      Una vez que el archivo haya terminado de descargarse, márquelo como ejecutable:

      • chmod +x bgpalerter-linux-x64

      A continuación, compruebe que BGPalerter se haya descargado e instalado correctamente comprobando el número de la versión:

      • ./bgpalerter-linux-x64 --version

      Esto dará como resultado el número de la versión actual:

      Output

      1.24.0

      Para poder ejecutar BGPalerter adecuadamente, deberá definir las redes que desea monitorear en un archivo de configuración. Cree y abra el archivo prefixes.yml en su editor de texto favorito:

      En este archivo de configuración, especificará cada una de las direcciones IP individuales, los intervalos de dirección IP y los números de AS que quiere monitorear.

      Añada el siguiente ejemplo y ajuste los valores de configuración según sea necesario usando la información de la red que identificó en el paso 1:

      ~/prefixes.yml

      your-ip-address/32:
        description: My Server
        asn:
          - 14061
        ignoreMorespecifics: false
      
      157.230.80.0/20:
        description: IP range for my Server
        asn:
          - 14061
        ignoreMorespecifics: false
      
      options:
        monitorASns:
          '14061':
            group: default
      

      Puede monitorear todos los intervalos de dirección IP o números de AS que quiera. Para monitorear direcciones IP individuales, represéntelas utilizando /32 para IPv4 y /128 para IPv6.

      El valor ignoreMorespecifics se utiliza para determinar si BGPalerter debe ignorar la actividad de las rutas más específicas (pequeñas) que la que está monitoreando. Por ejemplo, si está monitoreando /20 y se detecta un cambio de enrutamiento para /24 en su interior, se considera que es más específica. En la mayoría de los casos, no es recomendable ignorarlas si está monitoreando una red grande con varios prefijos de cliente delegados, sin embargo, puede ayudar a reducir interferencias de fondo.

      Ahora, puede ejecutar BGPalerter por primera vez para comenzar a monitorear sus redes:

      Si BGPalerter se inicia correctamente, verá un resultado similar al siguiente. Tenga en cuenta que, a veces, el monitoreo puede tardar unos minutos en iniciarse:

      Output

      Impossible to load config.yml. A default configuration file has been generated. BGPalerter, version: 1.24.0 environment: production Loaded config: /home/bgpalerter/config.yml Monitoring 157.230.80.0/20 Monitoring your-ip-address/32 Monitoring AS 14061

      BGPalerter se seguirá ejecutando hasta que lo detenga usando Ctrl+C.

      En el siguiente paso, interpretará algunas de las alertas que BGPalerter puede generar.

      Paso 4: Interpretar alertas de BGPalerter

      En este paso, revisará algunas alertas de BGPalerter de ejemplo. BGPalerter emitirá alertas en la fuente de salida principal, y también, de forma opcional, en cualquier otro extremo de información que pueda configurarse dentro de config.yml, como se describe en la documentación de BGPalerter.

      De manera predeterminada, BGPalerter monitorea y alerta sobre lo siguiente:

      • Intercepciones de ruta: se produce cuando un AS anuncia un prefijo que no está permitido, lo que provoca que el tráfico se enrute de forma errónea. Puede ser un ataque deliberado o un error de configuración accidental.

      • Pérdida de visibilidad de la ruta: una ruta se considera visible cuando la mayoría de los enrutadores de BGP de Internet pueden redirigir de forma fiable hacia ella. La pérdida de visibilidad significa que su red no está disponible, por ejemplo, si su emparejamiento de BGP ha dejado de funcionar.

      • Nuevos anuncios de subprefijos: sucede cuando un AS comienza a anunciar un prefijo que es más pequeño de lo que se espera. Esto puede indicar un cambio de configuración previsto, un error de configuración accidental o, en algunos casos, un ataque.

      • Actividad en su AS: normalmente, se refiere a anuncios de rutas nuevas. Una ruta se considera “nueva” si BGPalerter todavía no la conoce.

      A continuación, se presentan algunas alertas de ejemplo, junto con una descripción breve de su significado:

      Alert #1

      The prefix 203.0.113.0/24 is announced by AS64496 instead of AS65540
      

      Esta alerta muestra pruebas de una intercepción de la ruta, donde AS64496 anunció 203.0.113.0/24 cuando se esperaba que se anuncie AS65540. Esto es un claro indicio de un error de configuración que conduce a una fuga de la ruta o a una intercepción deliberada de un atacante.

      Alert #2

      The prefix 203.0.113.0/24 has been withdrawn. It is no longer visible from 6 peers
      

      Esta alerta indica que la red 203.0.113.0/24 ya no está visible. Esto puede deberse a un problema de enrutamiento previo o a un fallo de energía en un enrutador.

      Alert #3

      A new prefix 203.0.113.0/25 is announced by AS64496. It should be instead 203.0.113.0/24 announced by AS64496
      

      Esta alerta indica que se anunció un prefijo más específico en un caso en el que no estaba previsto, por ejemplo, si se anunció /25 cuando se esperaba /24. Es muy probable que esto sea un error de configuración, sin embargo, en algunos casos, puede indicar la intercepción de la ruta.

      Alert #4

      AS64496 is announcing 192.0.2.0/24 but this prefix is not in the configured list of announced prefixes
      

      Por último, esta alerta indica que AS64496 anunció un prefijo que BGPalerter todavía no conoce. Esto podría deberse a que usted está anunciando legítimamente un nuevo prefijo o podría ser un indicio de un error de configuración que haya provocado que anunciara accidentalmente un prefijo propiedad de otra persona.

      En este paso, revisó algunas alertas de BGPalerter de ejemplo. A continuación, configurará BGPalerter para que se ejecute de forma automática en el arranque.

      Paso 5: Iniciar BGPalerter en el arranque

      En este último paso, configurará BGPalerter para que se ejecute en el arranque.

      Asegúrese de seguir conectado con su usuario sin privilegios nuevo y, luego, abra el editor de crontab:

      Luego, añada la siguiente línea a la parte inferior del archivo de crontab:

      crontab

      @reboot sleep 10; screen -dmS bgpalerter "./bgpalerter-linux-x64"
      

      Cada vez que su sistema se arranque, esto creará una sesión screen separada denominada ‘bgpalerter’ en la que se iniciará BGPalerter.

      Guarde y salga del editor de crontab. Ahora, es conveniente que reinicie su sistema para asegurarse de que BGPalerter se inicie correctamente en el arranque.

      Primero, cierre la sesión de su usuario de BGPalerter:

      Luego, proceda con un reinicio normal del sistema:

      Una vez que su sistema se haya reiniciado, vuelva a iniciar sesión en su servidor y utilice su para volver a acceder a su usuario de BGPalerter:

      Luego, puede unirse a la sesión en cualquier momento para ver el resultado de BGPalerter:

      En este último paso, configuró BGPalerter para que se ejecute en el arranque.

      Conclusión

      En este artículo, configuró BGPalerter y lo utilizó para monitorear cambios de enrutamiento de BGP en las redes.

      Si quiere hacer que BGPalerter sea más fácil de usar, puede configurarlo para que envíe alertas a un canal de slack a través de un webhook:

      Si quiere obtener más información sobre BGP, pero no tiene acceso a un entorno de producción de BGP, puede utilizar DN42 para realizar pruebas con BGP en un entorno seguro y aislado:



      Source link