Skip to main content

A Flexible Network Data Analysis Framework

Project description

NFStream Logo


NFStream is a Python framework providing fast, flexible, and expressive data structures designed to make working with online or offline network data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, real world network data analysis in Python. Additionally, it has the broader goal of becoming a common network data analytics framework for researchers providing data reproducibility across experiments.

Live Notebook live notebook
Project Website website
Discussion Channel Gitter
Latest Release latest release
Supported Versions python3
Project License License
Build Status Github WorkFlows Travis CI
Code Quality Quality
Code Coverage Coverage

Main Features

  • Performance: NFStream is designed to be fast: AF_PACKETV3/FANOUT on Linux, parallel processing, native C (using CFFI) for critical computation and PyPy support.
  • Encrypted layer-7 visibility: NFStream deep packet inspection is based on nDPI. It allows NFStream to perform reliable encrypted applications identification and metadata fingerprinting (e.g. TLS, SSH, DHCP, HTTP).
  • Statistical features extraction: NFStream provides state of the art of flow-based statistical feature extraction. It includes both post-mortem statistical features (e.g. min, mean, stddev and max of packet size and inter arrival time) and early flow features (e.g. sequence of first n packets sizes, inter arrival times and directions).
  • Flexibility: NFStream is easily extensible using NFPlugins. It allows to create a new feature within a few lines of Python.
  • Machine Learning oriented: NFStream aims to make Machine Learning Approaches for network traffic management reproducible and deployable. By using NFStream as a common framework, researchers ensure that models are trained using the same feature computation logic and thus, a fair comparison is possible. Moreover, trained models can be deployed and evaluated on live network using NFPlugins.

How to get it?

Binary installers for the latest released version are available on Pypi.

pip install nfstream

How to use it?

Encrypted application identification and metadata extraction

Dealing with a big pcap file and just want to aggregate into labeled network flows? NFStream make this path easier in few lines:

from nfstream import NFStreamer
# We display all streamer parameters with their default values.
# See documentation for detailed information about each parameter.
# https://www.nfstream.org/docs/api#nfstreamer
my_streamer = NFStreamer(source="facebook.pcap", # or network interface
                         decode_tunnels=True,
                         bpf_filter=None,
                         promiscuous_mode=True,
                         snapshot_length=1536,
                         idle_timeout=15,
                         active_timeout=1800,
                         accounting_mode=0,
                         udps=None,
                         n_dissections=20,
                         statistical_analysis=False,
                         splt_analysis=0,
                         n_meters=0,
                         performance_report=0)

for flow in my_streamer:
    print(flow)  # print it.
# See documentation for each feature detailed description.
# https://www.nfstream.org/docs/api#nflow
NFlow(id=0,
      expiration_id=0,
      src_ip='192.168.43.18',
      src_ip_is_private=1,
      src_port=52066,
      dst_ip='66.220.156.68',
      dst_ip_is_private=0,
      dst_port=443,
      protocol=6,
      ip_version=4,
      vlan_id=0,
      bidirectional_first_seen_ms=1472393122365,
      bidirectional_last_seen_ms=1472393123665,
      bidirectional_duration_ms=1300,
      bidirectional_packets=19,
      bidirectional_bytes=5745,
      src2dst_first_seen_ms=1472393122365,
      src2dst_last_seen_ms=1472393123408,
      src2dst_duration_ms=1043,
      src2dst_packets=9,
      src2dst_bytes=1345,
      dst2src_first_seen_ms=1472393122668,
      dst2src_last_seen_ms=1472393123665,
      dst2src_duration_ms=997,
      dst2src_packets=10,
      dst2src_bytes=4400,
      application_name='TLS.Facebook',
      application_category_name='SocialNetwork',
      application_is_guessed=0,
      requested_server_name='facebook.com',
      client_fingerprint='bfcc1a3891601edb4f137ab7ab25b840',
      server_fingerprint='2d1eb5817ece335c24904f516ad5da12',
      http_user_agent='',
      http_content_type='')

Post-mortem statistical flow features extraction

NFStream performs 48 post mortem flow statistical features extraction which include detailed TCP flags analysis, minimum, mean, maximum and standard deviation of both packet size and interarrival time in each direction.

from nfstream import NFStreamer
my_streamer = NFStreamer(source="facebook.pcap",
                         # Disable L7 dissection for readability purpose.
                         n_dissections=0,  
                         statistical_analysis=True)
for flow in my_streamer:
    print(flow)
# See documentation for each feature detailed description.
# https://www.nfstream.org/docs/api#nflow
NFlow(id=0,
      expiration_id=0,
      src_ip='192.168.43.18',
      src_ip_is_private=1,
      src_port=52066,
      dst_ip='66.220.156.68',
      dst_ip_is_private=0,
      dst_port=443,
      protocol=6,
      ip_version=4,
      vlan_id=0,
      bidirectional_first_seen_ms=1472393122365,
      bidirectional_last_seen_ms=1472393123665,
      bidirectional_duration_ms=1300,
      bidirectional_packets=19,
      bidirectional_bytes=5745,
      src2dst_first_seen_ms=1472393122365,
      src2dst_last_seen_ms=1472393123408,
      src2dst_duration_ms=1043,
      src2dst_packets=9,
      src2dst_bytes=1345,
      dst2src_first_seen_ms=1472393122668,
      dst2src_last_seen_ms=1472393123665,
      dst2src_duration_ms=997,
      dst2src_packets=10,
      dst2src_bytes=4400,
      bidirectional_min_ps=66,
      bidirectional_mean_ps=302.36842105263156,
      bidirectional_stddev_ps=425.53315715259754,
      bidirectional_max_ps=1454,
      src2dst_min_ps=66,
      src2dst_mean_ps=149.44444444444446,
      src2dst_stddev_ps=132.20354676701294,
      src2dst_max_ps=449,
      dst2src_min_ps=66,
      dst2src_mean_ps=440.0,
      dst2src_stddev_ps=549.7164925870628,
      dst2src_max_ps=1454,
      bidirectional_min_piat_ms=0,
      bidirectional_mean_piat_ms=72.22222222222223,
      bidirectional_stddev_piat_ms=137.34994188549086,
      bidirectional_max_piat_ms=398,
      src2dst_min_piat_ms=0,
      src2dst_mean_piat_ms=130.375,
      src2dst_stddev_piat_ms=179.72036811192467,
      src2dst_max_piat_ms=415,
      dst2src_min_piat_ms=0,
      dst2src_mean_piat_ms=110.77777777777777,
      dst2src_stddev_piat_ms=169.51458475436397,
      dst2src_max_piat_ms=409,
      bidirectional_syn_packets=2,
      bidirectional_cwr_packets=0,
      bidirectional_ece_packets=0,
      bidirectional_urg_packets=0,
      bidirectional_ack_packets=18,
      bidirectional_psh_packets=9,
      bidirectional_rst_packets=0,
      bidirectional_fin_packets=0,
      src2dst_syn_packets=1,
      src2dst_cwr_packets=0,
      src2dst_ece_packets=0,
      src2dst_urg_packets=0,
      src2dst_ack_packets=8,
      src2dst_psh_packets=4,
      src2dst_rst_packets=0,
      src2dst_fin_packets=0,
      dst2src_syn_packets=1,
      dst2src_cwr_packets=0,
      dst2src_ece_packets=0,
      dst2src_urg_packets=0,
      dst2src_ack_packets=10,
      dst2src_psh_packets=5,
      dst2src_rst_packets=0,
      dst2src_fin_packets=0)

Early statistical flow features extraction

NFStream performs early (up to 255 packets) flow statistical features extraction (also referred as SPLT analysis in the literature). It is summarized as a sequence a these packets directions, sizes and interarrival times.

from nfstream import NFStreamer
my_streamer = NFStreamer(source="facebook.pcap",
                         # We disable both l7 dissection and statistical analysis
                         # for readability purpose.
                         n_dissections=0,
                         statistical_analysis=False,
                         splt_analysis=10)
for flow in my_streamer:
    print(flow)
# See documentation for each feature detailed description.
# https://www.nfstream.org/docs/api#nflow
NFlow(id=0,
      expiration_id=0,
      src_ip='192.168.43.18',
      src_ip_is_private=1,
      src_port=52066,
      dst_ip='66.220.156.68',
      dst_ip_is_private=0,
      dst_port=443,
      protocol=6,
      ip_version=4,
      vlan_id=0,
      bidirectional_first_seen_ms=1472393122365,
      bidirectional_last_seen_ms=1472393123665,
      bidirectional_duration_ms=1300,
      bidirectional_packets=19,
      bidirectional_bytes=5745,
      src2dst_first_seen_ms=1472393122365,
      src2dst_last_seen_ms=1472393123408,
      src2dst_duration_ms=1043,
      src2dst_packets=9,
      src2dst_bytes=1345,
      dst2src_first_seen_ms=1472393122668,
      dst2src_last_seen_ms=1472393123665,
      dst2src_duration_ms=997,
      dst2src_packets=10,
      dst2src_bytes=4400,
      # The sequence of 10 first packet direction, size and inter arrival time.
      splt_direction=[0, 1, 0, 0, 1, 1, 0, 1, 0, 1],
      splt_ps=[74, 74, 66, 262, 66, 1454, 66, 1454, 66, 463],
      splt_piat_ms=[0, 303, 0, 0, 313, 0, 0, 0, 0, 1])

Pandas export interface

NFStream natively supports Pandas as export interface.

# See documentation for more details.
# https://www.nfstream.org/docs/api#pandas-dataframe-conversion
my_dataframe = NFStreamer(source='facebook.pcap').to_pandas(ip_anonymization=False)
my_dataframe.head(5)

CSV export interface

NFStream natively supports CSV file format as export interface.

# See documentation for more details.
# https://www.nfstream.org/docs/api#csv-file-conversion
flows_count = NFStreamer(source='facebook.pcap').to_csv(path=None,
                                                        flows_per_file=0,
                                                        ip_anonymization=False)

Extending NFStream

Didn't find a specific flow feature? add a plugin to NFStream in few lines:

from nfstream import NFPlugin

class MyCustomFeature(NFPlugin):
    def on_init(self, packet, flow):
        # flow creation with the first packet
        if packet.raw_size == self.custom_size:
            flow.udps.packet_with_custom_size = 1
        else:
            flow.udps.packet_with_custom_size = 0

    def on_update(self, packet, flow):
        # flow update with each packet belonging to the flow 
        if packet.raw_size == self.custom_size:
            flow.udps.packet_with_custom_size += 1


extended_streamer = NFStreamer(source='facebook.pcap', 
                               udps=MyCustomFeature(custom_size=555))

for flow in extended_streamer:
    # see your dynamically created metric in generated flows
    print(flow.udps.packet_with_custom_size) 

Machine Learning models training and deployment

In the following example, we demonstrate a simplistic machine learning approach training and deployment. We suppose that we want to run a classification of Social Network category flows based on bidirectional_packets and bidirectional_bytes as features. For the sake of brevity, we decide to predict only at flow expiration stage.

Training the model

from nfstream import NFPlugin, NFStreamer
import numpy
from sklearn.ensemble import RandomForestClassifier

df = NFStreamer(source="training_traffic.pcap").to_pandas()
X = df[["bidirectional_packets", "bidirectional_bytes"]]
y = df["application_category_name"].apply(lambda x: 1 if 'SocialNetwork' in x else 0)
model = RandomForestClassifier()
model.fit(X, y)

ML powered streamer on live traffic

class ModelPrediction(NFPlugin):
    def on_init(self, packet, flow):
        flow.udps.model_prediction = 0
    def on_expire(self, flow):
        # You can do the same in on_update entrypoint and force expiration with custom id. 
        to_predict = numpy.array([flow.bidirectional_packets,
                                  flow.bidirectional_bytes]).reshape((1,-1))
        flow.udps.model_prediction = self.my_model.predict(to_predict)

ml_streamer = NFStreamer(source="eth0", udps=ModelPrediction(my_model=model))
for flow in ml_streamer:
    print(flow.udps.model_prediction)

More NFPlugin examples and details are provided on the official documentation. You can also test NFStream without installation using our live demo notebook.

Building from sources l m

If you want to build NFStream from sources. Please read the installation guide.

Contributing

Please read Contributing for details on our code of conduct, and the process for submitting pull requests to us.

Ethics

NFStream is intended for network data research and forensics. Researchers and network data scientists can use these framework to build reliable datasets, train and evaluate network applied machine learning models. As with any packet monitoring tool, NFStream could potentially be misused. Do not run it on any network of which you are not the owner or the administrator.

Credits

Authors

The following people contributed to NFStream:

Supporting organizations

The following organizations are supporting NFStream:

sah tuke ntop

License

This project is licensed under the LGPLv3 License - see the License file for details

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

nfstream-6.1.2-pp36-pypy36_pp73-macosx_10_14_x86_64.whl (936.9 kB view details)

Uploaded PyPy macOS 10.14+ x86-64

nfstream-6.1.2-cp38-cp38-manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.8

nfstream-6.1.2-cp38-cp38-manylinux1_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.8

nfstream-6.1.2-cp38-cp38-macosx_10_14_x86_64.whl (936.9 kB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

nfstream-6.1.2-cp37-cp37m-manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.7m

nfstream-6.1.2-cp37-cp37m-manylinux1_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.7m

nfstream-6.1.2-cp37-cp37m-macosx_10_14_x86_64.whl (936.9 kB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

nfstream-6.1.2-cp36-cp36m-manylinux2014_aarch64.whl (1.3 MB view details)

Uploaded CPython 3.6m

nfstream-6.1.2-cp36-cp36m-manylinux1_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.6m

nfstream-6.1.2-cp36-cp36m-macosx_10_14_x86_64.whl (937.0 kB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

Details for the file nfstream-6.1.2-pp36-pypy36_pp73-manylinux1_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-pp36-pypy36_pp73-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: PyPy
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 PyPy/7.3.1

File hashes

Hashes for nfstream-6.1.2-pp36-pypy36_pp73-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 5abc68237c345e0abce3851eddac7fd4a92fdce59f5078c3ee587b81a598b002
MD5 fc6c1daec6182c8d53117f817a4ab533
BLAKE2b-256 e82d1884f0f9bd4c40f488419405d607f7ffdf99301bec4364e32b67c2001d22

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-pp36-pypy36_pp73-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-pp36-pypy36_pp73-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 936.9 kB
  • Tags: PyPy, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 PyPy/7.3.1

File hashes

Hashes for nfstream-6.1.2-pp36-pypy36_pp73-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 1146f86d6a3efa213f69e2e1152c876da4e4c313351adab21fdb63c788914c95
MD5 e2ca86ea3c225af3b1b67ed76a3eb443
BLAKE2b-256 9e9c1ac808cf747b51b1cd612eab28db8685880ff29024de9accfff9dc87b938

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp38-cp38-manylinux2014_aarch64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp38-cp38-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.0

File hashes

Hashes for nfstream-6.1.2-cp38-cp38-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6985bff54e3bb0aaa546c9c9805fe8f52a056a9684c28f744238d60d86d27040
MD5 0f4384884c82c88968b3fb9cec854b53
BLAKE2b-256 f560bd3835963fe54bdb5e4aa646714ea8292d47e77eec498832442652ef9a75

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp38-cp38-manylinux1_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp38-cp38-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.8
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for nfstream-6.1.2-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 70fb974364728cde2828e1691ab2a08d72588bd1494d74e684c5550e60952f5c
MD5 7f22ffc540f369498215938874d55745
BLAKE2b-256 659c50524ac2e99311b18f8e84d9f911f7736f4bb80424c903219959ee0ae4ac

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp38-cp38-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 936.9 kB
  • Tags: CPython 3.8, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for nfstream-6.1.2-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 a9f0012293826782248e5367084e06cc18a987c4455380ec5d255690360a657a
MD5 a322485725ec83f710a3c02abba50c6b
BLAKE2b-256 d394c43a03e692231667a2aef4b1080bb475d0240b8004723c26c35f65ce4af9

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp37-cp37m-manylinux2014_aarch64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp37-cp37m-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.5

File hashes

Hashes for nfstream-6.1.2-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 78d1047ec12ba9cde2bf7b26764419c03468d56e19902de63512aef98c625e7d
MD5 f7771c4652b93f107701dbc1b67978ff
BLAKE2b-256 9361c1cd35d0b1fb6142800744a5aa7677335955689f8effdd3d4d3e200a184d

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for nfstream-6.1.2-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 36398553ef4c7e275d48e275ca093a5a5607da894b0d5c70d57190cdb3da3d56
MD5 37e5223066976f5f7ba4089c5195d11b
BLAKE2b-256 18ec2b52817f0031a2e1b835444dd6d549126a2c8108386e79f9ff38e842c965

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp37-cp37m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp37-cp37m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 936.9 kB
  • Tags: CPython 3.7m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.7.9

File hashes

Hashes for nfstream-6.1.2-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 f354d8c5f128b41d22a440f01b0d9549ea0ba014a69b546b8844114863d5ebaa
MD5 3a4e9b1504d46e4a92b419f451b75dbb
BLAKE2b-256 9c4b1c9c652504a4769c709607edad269cc55de9067d59df118f8e1ba6d4e716

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp36-cp36m-manylinux2014_aarch64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp36-cp36m-manylinux2014_aarch64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.6.9

File hashes

Hashes for nfstream-6.1.2-cp36-cp36m-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ed132cfd5c545b641067f723e7d228c6a44fa2ee3332c1e59456c6b72e31f099
MD5 130e825b5091424bb565db492cf963c9
BLAKE2b-256 5ff78429700cf8988c4626814b71510aa41061277454e41945964967700ab9d3

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.6.12

File hashes

Hashes for nfstream-6.1.2-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b78ff72776a135fd7769182bde2b7f7286d2c2b54a78fd6ee251d98211a58c3a
MD5 24094c58d8729cfc50be8fcd3c1375bf
BLAKE2b-256 ffab14e13aa9466ebe9f831e3de2cd422ccabf02cfe50b627a1d74e3e8e2ba78

See more details on using hashes here.

File details

Details for the file nfstream-6.1.2-cp36-cp36m-macosx_10_14_x86_64.whl.

File metadata

  • Download URL: nfstream-6.1.2-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 937.0 kB
  • Tags: CPython 3.6m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.6.12

File hashes

Hashes for nfstream-6.1.2-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 6858b3b1a275db9397710e9c1eedb5588bfab9db9e3f6b78c1aa41722c3a3e09
MD5 553798245c096b4e8e39fa8e68fd2cb5
BLAKE2b-256 7d308c408deb0a305abe8ab9feb090470aba03053b8954631573bb9b76a5f5ab

See more details on using hashes here.

Supported by

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