---
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.
