Cliente de API de P0F Python
Este es un cliente API simple para P0F3, disponible en http://lcamtuf.coredump.cx/p0f3/. No es compatible con la versión 2.x o 1.x. Inicie la opción P0F con -s path/to/unix_socket .
Uso básico:
de P0F Import P0F, P0FException
datos = ninguno
P0F = P0F ("P0F.SOCK") # señala esto al socket definido con el argumento "-S".
intentar:
Data = P0F.Get_info ("192.168.0.1")
Excepto P0FException, E:
# La consulta no válida fue enviada a P0F. ¿Quizás la API ha cambiado?
impresión
Excepto KeyError, E:
# No hay datos disponibles para esta dirección IP.
impresión
Excepto ValueError, E:
# P0F devolvió valores constantes no válidos. ¿Quizás la API ha cambiado?
impresión
Si datos:
Imprima "Primero visto:", Data ["First_seen"]
Imprima "Último visto:", Data ["Last_seen"]
Integración de Django
Ver ejemplos/django_models.py para el modelo completo Django de los datos devueltos por P0F.
Django Middleware está disponible en p0f.django.middleware .
Para usar, agregue P0FSOCKET = "path/to/p0f_unix_socket" a la configuración.py de su proyecto, y p0f.django.middleware.P0fMiddleware a MIDDLEWARE_CLASSES .
El middleware agrega el atributo p0f a todas las solicitudes entrantes. request.p0f es ninguna si la conexión al P0F falló o P0F no devolvió los datos para la dirección IP remota.
Campos de datos
Las partes de estas descripciones se copian descaradamente de http://lcamtuf.coredump.cx/p0f3/readme:
Por defecto, se analizan los siguientes campos:
- DateTime: First_seen
- DateTime: Last_seen
- Timedelta: tiempo de actividad
- int: Time_sec
- Timedelta: up_mod_days
- DateTime: Last_nat
- DateTime: last_chg
Además, Bad_SW y OS_Match_Q están validados. Se plantea "ValueError", si se encuentra un valor incorrecto. Para todos los campos vacíos, ninguno se usa en lugar de cadenas o constantes vacías:
- tiempo de actividad_min
- TIME_SEC
- tiempo de actividad
- up_mod_days
- Last_nat
- last_chg
- distancia
- Bad_Sw
- OS_NAME
- OS_FLABEL
- http_flavor
- link_type
- idioma
Este análisis y validación se puede deshabilitar con
p0f.get_info ("192.168.0.1", verdadero)
Descripciones completas de los campos:
- int: First_seen - Tiempo UNIX (segundos) de la primera observación del huésped.
- INT: LIST_SEEN - TIEMPO UNIX (segundos) del tráfico más reciente.
- INT: Total_Conn - Número total de conexiones vistas.
- INT: Time_min : tiempo de actividad calculado del sistema, en minutos. Cero si no se sabe.
- INT: UP_MOD_DAYS - Intervalo de envoltura de tiempo de actividad, en días.
- INT: LIST_NAT - Tiempo de la detección más reciente del intercambio de IP (NAT, equilibrio de carga, proxy). Cero si nunca se detecta.
- INT: LIST_CHG - Tiempo de la falta de coincidencia individual más reciente del sistema operativo (por ejemplo, debido a la reutilización de Multiboot o IP).
- int: distancia - distancia del sistema (derivada de ttl; -1 si no hay datos).
- INT: BAD_SW - P0F cree que las cadenas de agentes de usuario o servidor no son precisas. El valor de 1 significa diferencia de sistema operativo (posiblemente debido a la representación), mientras que 2 significa un desajuste absoluto. Nota: Si el agente de usuario no está presente en absoluto, este valor permanece en 0.
- int: OS_Match_q - Calidad de coincidencia del sistema operativo: 0 para una coincidencia normal; 1 para difuso (por ejemplo, la diferencia TTL o DF); 2 para una firma genérica; y 3 para ambos.
- String: OS_Name - Nombre del sistema operativo más reciente coincidente. Si no se conoce, OS_Name es una cadena vacía. Nota: Si el host se ve primero usando un sistema conocido y luego cambia a uno desconocido, este campo no se restablece.
- Cadena: OS_FLIVEAD - Versión del sistema operativo. Puede estar vacío si no hay datos.
- Cadena: http_name : la aplicación HTTP identificada positivamente reciente (por ejemplo, 'Firefox').
- Cadena: http_flavor - versión de la aplicación HTTP, si corresponde.
- String: Link_Type - Tipo de enlace de red, si se reconoce.
- Cadena: lenguaje - lenguaje del sistema, si se reconoce.
Licencia
Ver licencia.txt