Opciones de Filtrado

La API de Tráfico No Deseado admite filtrado simple y complejo para los puntos finales /sessions, /attempts y /malware. Esta página explica cómo usar estos filtros para consultar datos específicos.

Filtros Simples

Los filtros simples se aplican usando parámetros de consulta en la URL. Cada parámetro corresponde a un campo en el modelo de datos, y múltiples parámetros se combinan con una operación AND implícita. Los filtros simples son compatibles con los siguientes puntos finales:

La tabla a continuación enumera los campos de filtro simple compatibles para cada punto final:

Punto Final Campo de Filtro Tipo de Dato Descripción
/sessions session-id Entero ID de sesión único
/sessions session Cadena Identificador de sesión (por ejemplo, "2a58f17a436b")
/sessions commands Cadena Comandos ejecutados en la sesión
/sessions dst-ip Cadena IP de destino (por ejemplo, "192.168.0.96")
/sessions dst-port Entero Puerto de destino (por ejemplo, 2723)
/sessions dst-asn Entero ASN de destino (por ejemplo, 7922)
/sessions dst-country Cadena País de destino con espacios codificados en URL (por ejemplo, "United%20States")
/sessions duration Flotante Duración de la sesión en segundos (por ejemplo, 1.23172)
/sessions protocol Cadena Protocolo (por ejemplo, "telnet", "ssh")
/sessions sensor Cadena Nombre del sensor (por ejemplo, "raspberrypi")
/sessions src-ip Cadena IP de origen (por ejemplo, "192.168.1.100")
/sessions src-port Entero Puerto de origen (por ejemplo, 61248)
/sessions src-asn Entero ASN de origen (por ejemplo, 4766)
/sessions src-country Cadena País de origen con espacios codificados en URL (por ejemplo, "South%20Korea")
/sessions timestamp Cadena Marca de tiempo de la sesión (por ejemplo, "2025-02-23T00:00:00Z")
/sessions traffic-type Cadena Tipo de tráfico (por ejemplo, "attack", "scan")
/sessions start Cadena Marca de tiempo inicial para el rango (por ejemplo, "2025-02-23T00:00:00Z")
/sessions end Cadena Marca de tiempo final para el rango (por ejemplo, "2025-02-23T23:59:59Z")
/attempts attempt-id Entero ID de intento único
/attempts attempt-session Cadena Identificador de sesión (por ejemplo, "2a58f17a436b")
/attempts attempt-login Cadena Éxito de inicio de sesión ("true" o "false")
/attempts attempt-credentials Cadena Credenciales con "||" codificado en URL como separador entre usuario y contraseña (formato: "usuario%7c%7ccontraseña")
/attempts attempt-username Cadena Nombre de usuario usado en el intento
/attempts attempt-password Cadena Contraseña usada en el intento
/attempts start, end Cadena Rango de marca de tiempo vía sesión
/malware malware-id Entero ID de malware único
/malware malware-session Cadena Identificador de sesión (por ejemplo, "82e4335b3bb3")
/malware malware-hash Cadena Hash de malware (por ejemplo, "a8460f446be540410004b1a8db4083773fa46f7fe76fa84219c93daa1669f8f2")
/malware malware-site Cadena URL del sitio de malware con barra inclinada codificada doblemente en URL (por ejemplo, "http:%252f%252f37.44.238.88")
/malware malware-type Cadena Tipo de malware (por ejemplo, "redir", "download", "upload")
/malware start, end Cadena Rango de marca de tiempo vía sesión

Ejemplo de Solicitud (Filtro Simple):

Recuperar sesiones donde la IP de destino es "192.168.0.96" y el protocolo es "telnet":

curl -H "X-API-Key: YOUR_API_KEY" -H "Accept: application/json" "https://defrancisco.us/unwanted-traffic/sessions?dst-ip=192.168.0.96&protocol=telnet&limit=1"

Ejemplo de Respuesta:

{
  "status": "success",
  "data": [
    {
      "attempts": [
        {
          "attempt_credentials": "root||xc3511",
          "attempt_id": 1,
          "attempt_login": "true",
          "attempt_password": "xc3511",
          "attempt_session": "2a58f17a436b",
          "attempt_username": "root"
        }
      ],
      "commands": "sh; shell; enable; system; ping ;sh; >/usr/.a && cd /usr/; rm -rf .a; >/mnt/.a && cd /mnt/; rm -rf .a; >/var/run/.a && cd /var/run/; rm -rf .a; >/dev/shm/.a && cd /dev/shm/; rm -rf .a; >/etc/.a && cd /etc/; rm -rf .a; >/var/.a && cd /var/; rm -rf .a; >/tmp/.a && cd /tmp/; rm -rf .a; >/dev/.a && cd /dev/; rm -rf .a; >/var/home/user/fw/.a && cd /var/home/user/fw/; rm -rf .a; for i in `cat /proc/mounts|grep tmpfs|grep -v noexec|cut -d ' ' -f 2`; do >$i/.a && cd $i;done; cat /proc/mounts | grep tmpfs | grep -v noexec | cut -d   -f 2; /bin/busybox wget --help; /bin/busybox ftpget --help; /bin/busybox echo -e '\\\\x67\\\\x61\\\\x79\\\\x66\\\\x67\\\\x74';",
      "dst_asn": 7922,
      "dst_country": "United States",
      "dst_ip": "192.168.0.96",
      "dst_port": 2723,
      "duration": 1.23172,
      "malware": [],
      "protocol": "telnet",
      "sensor": "raspberrypi",
      "session": "2a58f17a436b",
      "session_id": 1,
      "src_asn": 4766,
      "src_country": "South Korea",
      "src_ip": "192.168.1.100",
      "src_port": 61248,
      "timestamp": "Sun, 23 Feb 2025 00:00:01 GMT",
      "traffic_type": "attack"
    }
  ],
  "pagination": {
    "limit": 1,
    "offset": 0,
    "totalRecords": 6850
  }
}

Filtros Complejos

Los filtros complejos se aplican usando un único parámetro de consulta filter, que acepta un objeto codificado en JSON. Los filtros complejos admiten operadores avanzados y combinaciones lógicas, lo que permite consultas más precisas. Los operadores compatibles incluyen:

El objeto JSON del filtro tiene la siguiente estructura:

Los filtros complejos deben estar codificados en URL cuando se incluyen en la cadena de consulta.

Ejemplo de Solicitud (Filtro Complejo):

Recuperar sesiones donde la IP de origen es "192.168.1.100" Y el protocolo es "telnet" O "ssh":

curl -H "X-API-Key: YOUR_API_KEY" -H "Accept: application/json" "https://defrancisco.us/unwanted-traffic/sessions?filter=%7B%22and%22:%5B%7B%22field%22:%22src_ip%22,%22operator%22:%22eq%22,%22value%22:%22192.168.1.100%22%7D,%7B%22or%22:%5B%7B%22field%22:%22protocol%22,%22operator%22:%22eq%22,%22value%22:%22telnet%22%7D,%7B%22field%22:%22protocol%22,%22operator%22:%22eq%22,%22value%22:%22ssh%22%7D%5D%7D%5D%7D&limit=1"

JSON de Filtro Decodificado:

{
  "and": [
    {
      "field": "src_ip",
      "operator": "eq",
      "value": "192.168.1.100"
    },
    {
      "or": [
        {
          "field": "protocol",
          "operator": "eq",
          "value": "telnet"
        },
        {
          "field": "protocol",
          "operator": "eq",
          "value": "ssh"
        }
      ]
    }
  ]
}

Ejemplo de Respuesta:

{
  "status": "success",
  "data": [
    {
      "attempts": [
        {
          "attempt_credentials": "root||xc3511",
          "attempt_id": 1,
          "attempt_login": "true",
          "attempt_password": "xc3511",
          "attempt_session": "2a58f17a436b",
          "attempt_username": "root"
        }
      ],
      "commands": "sh; shell; enable; system; ping ;sh; >/usr/.a && cd /usr/; rm -rf .a; >/mnt/.a && cd /mnt/; rm -rf .a; >/var/run/.a && cd /var/run/; rm -rf .a; >/dev/shm/.a && cd /dev/shm/; rm -rf .a; >/etc/.a && cd /etc/; rm -rf .a; >/var/.a && cd /var/; rm -rf .a; >/tmp/.a && cd /tmp/; rm -rf .a; >/dev/.a && cd /dev/; rm -rf .a; >/var/home/user/fw/.a && cd /var/home/user/fw/; rm -rf .a; for i in `cat /proc/mounts|grep tmpfs|grep -v noexec|cut -d ' ' -f 2`; do >$i/.a && cd $i;done; cat /proc/mounts | grep tmpfs | grep -v noexec | cut -d   -f 2; /bin/busybox wget --help; /bin/busybox ftpget --help; /bin/busybox echo -e '\\\\x67\\\\x61\\\\x79\\\\x66\\\\x67\\\\x74';",
      "dst_asn": 7922,
      "dst_country": "United States",
      "dst_ip": "192.168.0.96",
      "dst_port": 2723,
      "duration": 1.23172,
      "malware": [],
      "protocol": "telnet",
      "sensor": "raspberrypi",
      "session": "2a58f17a436b",
      "session_id": 1,
      "src_asn": 4766,
      "src_country": "South Korea",
      "src_ip": "192.168.1.100",
      "src_port": 61248,
      "timestamp": "Sun, 23 Feb 2025 00:00:01 GMT",
      "traffic_type": "attack"
    }
  ],
  "pagination": {
    "limit": 1,
    "offset": 0,
    "totalRecords": 7604
  }
}

Consejos para el Uso de Filtros

Para usar los filtros de manera efectiva: