--- name: extract_mac_addresses kind: function lang: py domain: cybersecurity version: "1.0.0" purity: pure signature: "def extract_mac_addresses(text: str) -> list[dict]" description: "Extrae direcciones MAC en formato `xx:xx:xx:xx:xx:xx` o con guiones (`-`) de un texto, con offsets. Acepta hex en cualquier caso. Rechaza separadores mezclados." tags: [ioc, mac, network, regex, extract, cybersecurity, python] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "" imports: [re] params: - name: text desc: "string de texto del que extraer MAC addresses" output: "lista de dicts con {value, start, end, type='mac_address'} por cada MAC encontrada" tested: true tests: - "MAC con dos puntos" - "MAC con guiones" - "Separadores mezclados se rechazan" test_file_path: "python/functions/cybersecurity/tests/test_extract_iocs.py" file_path: "python/functions/cybersecurity/extract_mac_addresses.py" --- ## Ejemplo ```python extract_mac_addresses("router 00:1A:2B:3C:4D:5E and AA-BB-CC-DD-EE-FF") # [{"value": "00:1A:2B:3C:4D:5E", ..., "type": "mac_address"}, # {"value": "AA-BB-CC-DD-EE-FF", ..., "type": "mac_address"}] ``` ## Notas Cada direccion debe usar un solo separador (todos `:` o todos `-`). No se valida OUI ni se distingue unicast/multicast. Para extraer la parte de fabricante OUI: tomar los primeros 6 hex chars del `value` y consultar registro IEEE.