Skip to main content

Read pcap and assemble HTTP requests

Project description

https://travis-ci.org/travis-ci/travis-web.svg?branch=master https://codecov.io/gh/gaainf/pcaper/branch/master/graph/badge.svg https://img.shields.io/badge/python-2.7-blue.svg https://img.shields.io/badge/python-3.5-blue.svg https://img.shields.io/badge/python-3.6-blue.svg https://img.shields.io/pypi/l/pcaper.svg

The package helps to assemble and iterate HTTP requests. Pcaper provides class to read traffic files in pcap or har formats, executable converters - pcap2txt and har2txt. PcapParser based on dpkt. HarParser uses built-in json package.

pcaper extends dpkt.http.Request class. Following fields of HTTP request are available:

  • timestamp - timestamp of the last packet of original HTTP request

  • src - source IP address

  • dst - destination IP address

  • sport - source TCP port

  • dport - destination TCP port

  • method - HTTP request method

  • version - HTTP protocol version

  • uri - HTTP request URI

  • headers - ordered dictionary of HTTP headers

  • origin_headers - ordered dictionary HTTP headers with case sensetive names

  • body - HTTP request body

  • origin - original HTTP request

Installation

pip install pcaper

Import

import pcaper
pcap_parser = pcaper.PcapParser()
har_parser = pcaper.HarParser()

Examples

Iterate HTTP requests

Read pcap file, assemble and iterate HTTP requests

from pcaper import PcapParser

pcap_parser = PcapParser()
params = {
    'input': 'file.pcap',
}
for request in pcap_parser.read_pcap(params):
    print(request.origin)
from pcaper import HarParser

har_parser = HarParser()
params = {
    'input': 'file.har'
}
for request in har_parser.read_har(params):
    print(request.origin)

Extract separate HTTP request headers

You can extract header by name

reader = pcaper.PcapParser()
params = {
    'input': 'file.pcap'
}
for request in reader.read_pcap(params):
    print(request.headers['host'])
    print(request.headers['user-agent'])

Filter TCP/IP packets

It is possible to filter out excess packets

reader = pcaper.PcapParser()
params = {
    'input': 'file.pcap',
    'filter': 'tcp.dst == 1.1.1.1'
}
for request in reader.read_pcap(params):
    print(request.origin)

You can combine tcp and ip filters in dpkt style

reader = pcaper.PcapParser()
params = {
    'input': 'file.pcap',
    'filter': '(ip.src == 10.4.0.136 or ip.dst == 10.1.40.61) and tcp.dport == 8888'
}
for request in reader.read_pcap(params):
    print(request.origin)

It is possible to use excluding filter in dpkt style

reader = pcaper.PcapParser()
params = {
    'input': 'file.pcap',
    'filter': 'tcp.dport != 8888 and ip.dst != 10.1.40.61'
}
for request in reader.read_pcap(params):
    print(request.origin)

Note

New pcapng format is not supported by dpkt package, but you can convert input file from pcapng to pcap format with standard utility, which is installed with wireshark package.

mergecap file.pcapng -w out.pcap -F pcap

Scripts

pcap2txt

The pcap2txt script is installed to Python directory and can be executed directly in command line

It simplify parsing of pcap files. Just extract HTTP requests including its headers and body and print out complete data to console or file.

Print HTTP requests from pcap file:

pcap2txt file.pcap

Filter TCP/IP packets, extract HTTP requests and write to external file:

pcap2txt -f "tcp.dport == 8080 and ip.dst != 10.10.10.10" -o file.out file.pcap

Filter HTTP packets

pcap2txt -F '"rambler.ru" in http.uri' file.pcap

You can use logical expressions in filters

pcap2txt -F '"keep-alive" in http.headers["connection"] or "Keep-alive" in http.headers["connection"]' file.pcap

Standard Python string functions over HTTP request headers

pcap2txt -F '"keep-alive" in http.headers["connection"].lower()' file.pcap

Use excluding filters also

pcap2ammo -F '"rambler.ru" not in http.uri' file.pcap

Print statistics about counted requests:

pcap2txt -f "ip.src == 10.10.10.10" -S file.pcap

Stats:
    total: 1
    complete: 1
    incorrect: 0
    incomplete: 0

har2txt

The har2txt script is installed to Python directory and can be executed directly in command line

It simplify parsing of har files. Just extract HTTP requests including its headers and body and print out complete data to console or file.

Print HTTP requests from har file:

har2txt file.har

Filter HTTP packets

har2txt -F 'http.verision == "1.1"' file.har

Use excluding filters also

har2txt -F '"rambler.ru" not in http.uri' file.har

Filter packets with destination IP. pcaper extracts data from har file, which contains destination IP (dst filed), but doesn’t contain source IP, source and destination ports.

har2txt -F 'http.dst == "1.1.1.1"' file.har

Print statistics about counted requests:

har2txt -S -F 'http.dst == "10.10.10.10' file.har

Stats:
    total: 1
    complete: 1
    incorrect: 0
    incomplete: 0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pcaper-1.0.7.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pcaper-1.0.7-py2.py3-none-any.whl (16.2 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pcaper-1.0.7.tar.gz.

File metadata

  • Download URL: pcaper-1.0.7.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.2 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/2.7.15

File hashes

Hashes for pcaper-1.0.7.tar.gz
Algorithm Hash digest
SHA256 c088417db565023f70b99536a024e688a35355b527bf66cb5c45c5a478b0e104
MD5 e6d851f4feab99d3d65472c28a27dc62
BLAKE2b-256 51c79f5ab9ec946b92bac45cda3575670b95df4c7a221932c861226ab7d46e91

See more details on using hashes here.

File details

Details for the file pcaper-1.0.7-py2.py3-none-any.whl.

File metadata

  • Download URL: pcaper-1.0.7-py2.py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.2 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/2.7.15

File hashes

Hashes for pcaper-1.0.7-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 597f611b6ce0e7abd6df63f9e807d8c3da3ba2877241aa3f2b022470b6d6fa59
MD5 1aff904df8ac3f976a6fcba36ecc7928
BLAKE2b-256 f0c289d6f6f484584f862e9a6c299709163b73c1a21a2e6468b9f7949fd4ad9d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page