Skip to main content

RegexCap

Replace packet fields with a regex and display filter. This is useful for removing personally sensitive information by field. TraceWrangler, a windows GUI tool, also performs this function.

Installation

You can install from regexcap@PyPI with pip.

pip install regexcap

Alternatively, you can install by cloning it and installing it with pip.

git clone https://github.com/pocc/regexcap
cd regexcap
pip install .

Usage notes

  • -m uses multiprocessing and will speed up execution for large files
  • Avoid shorthand display filters like -e ip.addr and use their more explicit representations like -e ip.src -e ip.dst. Tshark maps shorthand display filters to exactly one field in json output, so fewer fields may be replaced than expected.
  • Options -r, -w, -e, -Y are copied from tshark for sake of familiarity
  • -Y creates a temporary file that is read from that is deleted on exit
  • This replaces bytes in packets, not on packet or pcap headers
  • Currently set to error if there is a length mismatch between old and new values.
  • This program will be slow! It uses python with a naive algorithm (i.e. it works)

Example Usage

Example 1: Replace MAC address NIC bytes

For example to replace the NIC-specific (last 6 bytes) part of all mac addresses:

$ tshark -r new.pcap -c 1
    1 6c:96:cf:d8:7f:e7  cc:65:ad:da:39:70 108.233.248.45  157.245.238.3 ...
$ regexcap -r old.pcap -w new.pcap -e eth.src -e eth.dst -s '.{6}$' -d 000000
$ tshark -r new.pcap -c 1
    1 6c:96:cf:00:00:00  cc:65:ad:00:00:00 108.233.248.45  157.245.238.3 ...
  • .{6}: Take exactly six bytes of any type
  • $: This regex ends at the end of the field

Example 2: Replace private IP addresses

To replace all private IP addresses with quad 0's, use a byte regex like so:

$ tshark -r new.pcap -c 1
    1   0.000000 192.168.1.246  217.221.186.35 TCP  54 59793  https(443) [ACK] Seq=1 Ack=1 Win=2048 Len=0
$ regexcap -r old.pcap -w new.pcap -d '^(?:0a..|ac1.|c0a8).{4}' -s '00000000' -e ip.addr
$ tshark -r new.pcap -c 1
    1   0.000000      0.0.0.0  217.221.186.35 TCP  54 59793  https(443) [ACK] Seq=1 Ack=1 Win=2048 Len=0

Breaking down the regex, an IP address is 32 bits => 8 nibbles (hexadecimal characters). The network bits of each of the private subnets determines how many nibbles each requires. In other words /8 => 2 network chars, /12 => 3 network chars, /16 => 4 network chars.

  • ^: regex starts at beginning of field
  • (?:...):
  • 10.0.0.0/8 =====> 0x0a + ......
  • 172.16.0.0/12 ==> 0xac1 + .....
  • 192.168.0.0/16 => 0xc0a8 + ....
  • .{4} summarizes the last 4 nibbles that are shared

To convert any IP address octet from decimal to hex, you can use the python built-in:

>>> hex(172)
'0xac'

Testing

Run tests/run_tests or pytest -vvv -x from the root dir.

License

Apache 2.0

Contact

Ross Jacobs, author, rj[AT]swit.sh https://github.com/pocc/regexcap

Download files

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

Source Distribution

RegexCap-0.1.tar.gz (10.8 kB view details)

Uploaded Source

File details

Details for the file RegexCap-0.1.tar.gz.

File metadata

  • Download URL: RegexCap-0.1.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.8

File hashes

Hashes for RegexCap-0.1.tar.gz
Algorithm Hash digest
SHA256 25afd4816e7003cf6f1a5fccb4fd6ceae3c50b129c8e68da1a7683643353118f
MD5 aebc4f83b66ddba00042565064187524
BLAKE2b-256 95e5c996b04059e9e4f926acbc2262353409ac164bc4032aff9acb1ab7a1453b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1 This release

1 file

0.0

1 file

Supported by

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