Skip to main content

pyp0f

Native implementation of p0f v3 in typed Python 3.


Documentation: https://github.com/Nisitay/pyp0f/blob/master/docs/README.md

Source Code: https://github.com/Nisitay/pyp0f


pyp0f is able to accurately guess the source OS or user application of a given packet with passive fingerprinting, as well as impersonate packets so that p0f will think it has been sent by a specific OS.

Motivation

  • pyp0f is platform independent (using Scapy), while p0f can be cumbersome to run on some platforms (such as Windows).
  • The implementation and concepts behind p0f are very sophisticated, but the tool is written in C which makes it harder to understand and extend. Performance is expected to be slower in Python, but pyp0f still performs well enough (see Performance benchmarks)
  • p0f heavily depends on full packet flow details, while pyp0f attempts to use as little information as possible. For example, you may be able to fingerprint a SYN+ACK packet from a session without having the matching SYN packet.
  • pyp0f aims to be highly configurable and used as a library, without limiting its effectiveness to one packet format/library, as opposed to p0f which runs on a seperate process and you query the results using an API.

Installation

$ pip install pyp0f

Features

  • Full p0f fingerprinting (MTU, TCP, HTTP)
  • p0f spoofing - impersonation (MTU, TCP)
  • TCP timestamps uptime detection

In Progress

  • Flow tracking
  • NAT detection

Getting Started

from scapy.layers.inet import IP, TCP
from pyp0f.database import DATABASE
from pyp0f.fingerprint import fingerprint_mtu, fingerprint_tcp, fingerprint_http
from pyp0f.fingerprint.results import MTUResult, TCPResult, HTTPResult

DATABASE.load()  # Load the fingerprints database

# MTU Fingerprinting
google_packet = IP() / TCP(options=[("MSS", 1430)])
mtu_result: MTUResult = fingerprint_mtu(google_packet)

# TCP Fingerprinting
linux_packet = IP(tos=0x10, flags=0x02, ttl=58) / TCP(
    seq=1,
    window=29200,
    options=[("MSS", 1460), ("SAckOK", b""), ("Timestamp", (177816630, 0)), ("NOP", None), ("WScale", 7)],
)
tcp_result: TCPResult = fingerprint_tcp(linux_packet)

# HTTP Fingerprinting
apache_payload = b"HTTP/1.1 200 OK\r\nDate: Fri, 10 Jun 2011 13:27:01 GMT\r\nServer: Apache\r\nLast-Modified: Thu, 09 Jun 2011 17:25:43 GMT\r\nExpires: Mon, 13 Jun 2011 17:25:43 GMT\r\nETag: 963D6BC0ED128283945AF1FB57899C9F3ABF50B3\r\nCache-Control: max-age=272921,public,no-transform,must-revalidate\r\nContent-Length: 491\r\nConnection: close\r\nContent-Type: application/ocsp-response\r\n\r\n"
http_result: HTTPResult = fingerprint_http(apache_payload)

Sources

Authors

Release files for pyp0f 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyp0f 0.3.0
File Size Uploaded
pyp0f-0.3.0.tar.gz 36.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyp0f 0.3.0
File Interpreter ABI Platform
pyp0f-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 89.2 kB

Release files / pyp0f-0.3.0.tar.gz

Download URL pyp0f-0.3.0.tar.gz
Size 36.1 kB
Tags Source
SHA-256 checksum
How to use checksums
74fe99c98c1937dbf242d8397b64197d9d9f10d527a4151431f29010c5338f63
BLAKE2b-256 checksum
How to use checksums
35ccf72f1309015a062bbd5c84db015d9a8b07199517426bfb03b5092edddf17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.7.8

Release files / pyp0f-0.3.0-py3-none-any.whl

Download URL pyp0f-0.3.0-py3-none-any.whl
Size 53.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9789a8933dea89830d9ca8bfc756221c9254673906b4928c0f078744d190194a
BLAKE2b-256 checksum
How to use checksums
b80d189c905a08053df6223905128901fcc9f7462845cbd87b6cf32b9b460a90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.7.8

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.1

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page