Página 1 de 1

[RESUELTO] Coincidencia de dirección MAC con Iface

Publicado: 22 de junio de 2022 - 11:37
por gavit
Buen día,

En un proyecto 802.1.X, necesitaría recuperar todas las direcciones MAC de mi red informática.
Más específicamente, la dirección MAC de la tarjeta Ethernet y de la tarjeta WIFI.

El problema es que las PC tienen hasta 38 direcciones MAC.
Necesitaría enumerarlos todos y ponerlos junto al nombre de su tarjeta (enps, eth, etc.)
Pero no podemos hacer:

Código: Seleccionar todo

 host_info->'networking'->*->'mac' as mac,
¿Cómo puedo proceder?

Dado que mi código actualmente se ve así:

Código: Seleccionar todo

select
distinct
host_info->'networking'->0->'mac' as mac,
host_info->'networking'->0->'iface' as iface,
computer_name
FROM hosts
Atentamente,
VITTAZ Gaëtan

Re: Coincidir dirección MAC con Iface

Publicado: 22 de junio de 2022 - 17:38
por htouvet
Buen día,
Para realizar consultas "avanzadas" sobre JSON, al estilo XPath para XML, es necesario agregar el módulo "jsquery" a PostgreSQL.

En Debian, para instalarlo: (si está instalado postgresql 13)

Código: Seleccionar todo

apt install postgresql-13-jsquery 
sudo -u postgres psql wapt -c "CREATE EXTENSION jsquery;"
Luego la consulta SQL:

Algo como esto:

Código: Seleccionar todo

SELECT
  computer_fqdn,
  t.*
FROM
  hosts,
  jsonb_to_recordset(host_info->'networking') as t
    (mac text, iface text);
                                

Re: Coincidir dirección MAC con Iface

Publicado: 23 de junio de 2022 - 13:16
por gavit
Buen día,

Muchas gracias por la rápida respuesta, ¡la consulta SQL funciona perfectamente!
Para computadoras MAC y Linux, no hay problemas de montaje.
Pero para las PC con Windows, tengo el siguiente comentario:
  • [ {6858AE84-3B6D-4D45-8D00-B9AFAA8D578E} (ejemplo)/lista]

    Intenté adaptar la consulta para la tabla WMI, por lo tanto, para los clientes Windows

    Código: Seleccionar todo

    SELECT
      computer_fqdn,
      t.*
    FROM
      hosts,
      jsonb_to_recordset(wmi->'Win32_NetworkAdapter') as t
        (MACAddress text, ProductName text);
        

    Esto no recupera la información; los campos MACAddress y ProductName permanecen vacíos.

    ¿Tiene alguna solución para reinstalar PC con Windows?
    O una solución que recuperaría los datos correctos en una sola solicitud sin tener que realizar una solicitud para Windows y otra para Linux/MAC.

    Atentamente,
    VITTAZ Gaëtan

Re: Coincidir dirección MAC con Iface

Publicado: 29 de junio de 2022 - 22:28
por sfonteneau
¡No muy lejos! ;)

Código: Seleccionar todo

SELECT
  computer_fqdn,
  t.*
FROM
  hosts,
  jsonb_to_recordset(wmi->'Win32_NetworkAdapter') as t
    ("MACAddress" text, "ProductName" text);          
Así, por ejemplo:

Código: Seleccionar todo

SELECT
  computer_fqdn,
  t.*
FROM
  hosts,
  jsonb_to_recordset(wmi->'Win32_NetworkAdapter') as t("MACAddress" text, "ProductName" text)
  WHERE t."ProductName" !~* 'vpn'
  AND t."ProductName" !~* 'bluetooth'
  AND t."ProductName" !~* 'Virtual Adapter'
  AND t."ProductName" !~* 'WAN Miniport'
  AND t."ProductName" !~* 'TAP-Windows Adapter V9'
  AND t."ProductName" !~* 'VirtualBox Host-Only Ethernet Adapter'
  AND t."ProductName" !~* 'XenServer PV Network Device'
  AND t."ProductName" !~* 'RAS Async Adapter'
  AND (t."MACAddress" <> '') ;