用于p0f3的API客户端
p0f的Python项目详细描述
这是一个用于p0f3的简单api客户端,可在 http://lcamtuf.coredump.cx/p0f3/。它与2.x版不兼容 或者1.x.使用-s path/to/unix_socket选项启动p0f。
基本用法:
from p0f import P0f, P0fException data = None p0f = P0f("p0f.sock") # point this to socket defined with "-s" argument. try: data = p0f.get_info("192.168.0.1") except P0fException, e: # Invalid query was sent to p0f. Maybe the API has changed? print e except KeyError, e: # No data is available for this IP address. print e except ValueError, e: # p0f returned invalid constant values. Maybe the API has changed? print e if data: print "First seen:", data["first_seen"] print "Last seen:", data["last_seen"]
django集成
有关p0f返回的数据的完整django模型,请参见examples/django_models.py。
django中间件在p0f.django.middleware中可用。
若要使用,请将P0FSOCKET = "path/to/p0f_unix_socket"添加到项目的settings.py中, 以及p0f.django.middleware.P0fMiddleware到MIDDLEWARE_CLASSES。
中间件将p0f属性添加到所有传入请求。request.p0f是 如果连接到p0f失败或p0f未返回远程IP地址的数据,则无。
数据字段
这些描述的一部分无耻地抄袭自 http://lcamtuf.coredump.cx/p0f3/README:
默认情况下,将分析以下字段:
- 日期时间:第一次看到
- 日期时间:上次看到
- 时间增量:uptime
- int:正常运行时间秒
- 时间增量:up_mod_days
- 日期时间:last纳特
- 日期时间:last_chg
此外,验证了bad_sw和os_match_q。“值错误” 如果遇到不正确的值,则引发。对于所有空字段, 不使用空字符串或常量:
- uptime_min
- uptime\u秒
- 正常运行时间
- 更新天数
- last纳特
- 最后一次检查
- 距离
- 坏的软件
- os_name
- os_风味
- http\u风格
- 链接类型
- 语言
使用
p0f.get_info("192.168.0.1", True)
字段的完整说明:
- int:第一次看到-unix第一次观察主机的时间(秒)。
- int:上次看到的-unix最近通信量的时间(秒)。
- int:total_conn-看到的连接总数。
- int:uptime\u min-计算的系统正常运行时间,以分钟为单位。如果不知道就归零。
- int:up_mod_days-正常运行时间环绕间隔,以天为单位。
- int:最后一个nat-最近检测到IP共享(nat、负载平衡、代理)的时间。如果从未检测到,则为零。
- int:last_chg-最近单个操作系统不匹配的时间(例如,由于多引导或IP重用)。
- int:distance-系统距离(如果没有数据,则从ttl;-1派生)。
- int:bad_sw-p0f认为用户代理或服务器字符串不准确。值1表示操作系统差异(可能是由于代理),而2表示完全不匹配。注意:如果根本不存在用户代理,则此值保持为0。
- int:os_match_q-os match quality:0表示正常匹配;1表示模糊(例如ttl或df差异);2表示一般签名;3表示两者。
- 字符串:os_name-最近正匹配的os的名称。如果OS未知,则OS\U名称为空字符串。注意:如果首先看到主机使用已知系统,然后切换到未知系统,则不会重置此字段。
- 字符串:os_flavor-os版本。如果没有数据,则可能为空。
- 字符串:http_name-最近确定的http应用程序(例如“firefox”)。
- 字符串:http_flavor-http应用程序的版本(如果有)。
- 字符串:link_type-网络链接类型(如果可以识别)。
- 字符串:language-系统语言,如果可以识别。