用于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.P0fMiddlewareMIDDLEWARE_CLASSES

中间件将p0f属性添加到所有传入请求。request.p0f是 如果连接到p0f失败或p0f未返回远程IP地址的数据,则无。

数据字段

这些描述的一部分无耻地抄袭自 http://lcamtuf.coredump.cx/p0f3/README

默认情况下,将分析以下字段:

  • 日期时间:第一次看到
  • 日期时间:上次看到
  • 时间增量:uptime
  • int:正常运行时间秒
  • 时间增量:up_mod_days
  • 日期时间:last纳特
  • 日期时间:last_chg

此外,验证了bad_swos_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-系统语言,如果可以识别。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何用java表示这个数学函数的算法   Java/Stream帮助:仅使用streams将嵌套的映射列表转换为映射   使用Selenium连接到数据库时发生java未知主机异常   java如何了解jvm内存使用:“堆内存”和“堆外内存”   java Oracle BI报告导入模板   java如何使用Spring将xml转换为bean?   java线程。join()以保证执行顺序   java从THINGSPEAK到ANDROID应用程序获取JSON数据   使用Java的stanford库中的异常   java正确使用来自其他类文件的方法   如果集合中的元素类型为接口类型,如何填充集合?(爪哇)   记录java。util。记录器创建的文件超过了应有的数量   类Java对象uniq值   尝试调用无法应用于()的方法时出现java错误