Skip to main content

A Flexible Network Data Analysis Framework

Project description

NFStream Logo


NFStream is a multiplatform 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 pypy3
Project License License
Continuous Integration Linux WorkFlows MacOS WorkFlows Windows WorkFlows ARM64 WorkFlows ARM32 WorkFlows
Code Quality Quality Quality
Code Coverage Coverage

Table of Contents

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).
  • System visibility: NFStream probes the monitored system's kernel to obtain information on open Internet sockets and collects guaranteed ground-truth (process name, PID, etc.) at the application level.
  • 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

Windows Notes: NFStream does not include capture drivers on Windows. It is required to install Npcap drivers before installing NFStream. If Wireshark is already installed on Windows, then Npcap drivers are already installed.

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=120,
                         active_timeout=1800,
                         accounting_mode=0,
                         udps=None,
                         n_dissections=20,
                         statistical_analysis=False,
                         splt_analysis=0,
                         n_meters=0,
                         performance_report=0,
                         system_visibility_mode=0,
                         system_visibility_poll_ms=100,
                         system_visibility_extension_port=28314)
                         
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_mac='30:52:cb:6c:9c:1b',
      src_oui='30:52:cb',
      src_port=52066,
      dst_ip='66.220.156.68',
      dst_mac='98:0c:82:d3:3c:7c',
      dst_oui='98:0c:82',
      dst_port=443,
      protocol=6,
      ip_version=4,
      vlan_id=0,
      tunnel_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,
      application_confidence=4,
      requested_server_name='facebook.com',
      client_fingerprint='bfcc1a3891601edb4f137ab7ab25b840',
      server_fingerprint='2d1eb5817ece335c24904f516ad5da12',
      user_agent='',
      content_type='')

System visibility

NFStream probes the monitored system's kernel to obtain information on open Internet sockets and collects guaranteed ground-truth (process name, PID, etc.) at the application level.

from nfstream import NFStreamer
my_streamer = NFStreamer(source="Intel(R) Wi-Fi 6 AX200 160MHz", # Live capture mode. 
                         # Disable L7 dissection for readability purpose only.
                         n_dissections=0,
                         system_visibility_poll_ms=100,
                         system_visibility_mode=1)
                         
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_mac='30:52:cb:6c:9c:1b',
      src_oui='30:52:cb',
      src_port=59339,
      dst_ip='184.73.244.37',
      dst_mac='98:0c:82:d3:3c:7c',
      dst_oui='98:0c:82',
      dst_port=443,
      protocol=6,
      ip_version=4,
      vlan_id=0,
      tunnel_id=0,
      bidirectional_first_seen_ms=1638966705265,
      bidirectional_last_seen_ms=1638966706999,
      bidirectional_duration_ms=1734,
      bidirectional_packets=98,
      bidirectional_bytes=424464,
      src2dst_first_seen_ms=1638966705265,
      src2dst_last_seen_ms=1638966706999,
      src2dst_duration_ms=1734,
      src2dst_packets=22,
      src2dst_bytes=2478,
      dst2src_first_seen_ms=1638966705345,
      dst2src_last_seen_ms=1638966706999,
      dst2src_duration_ms=1654,
      dst2src_packets=76,
      dst2src_bytes=421986,
      # The process that generated this reported flow. 
      system_process_pid=14596,
      system_process_name='FortniteClient-Win64-Shipping.exe')

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_mac='30:52:cb:6c:9c:1b',
      src_oui='30:52:cb',
      src_port=52066,
      dst_ip='66.220.156.68',
      dst_mac='98:0c:82:d3:3c:7c',
      dst_oui='98:0c:82',
      dst_port=443,
      protocol=6,
      ip_version=4,
      vlan_id=0,
      tunnel_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 l7 dissection for readability purpose.
                         n_dissections=0,
                         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_mac='30:52:cb:6c:9c:1b',
      src_oui='30:52:cb',
      src_port=52066,
      dst_ip='66.220.156.68',
      dst_mac='98:0c:82:d3:3c:7c',
      dst_oui='98:0c:82',
      dst_port=443,
      protocol=6,
      ip_version=4,
      vlan_id=0,
      tunnel_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
from nfstream import NFStreamer
my_dataframe = NFStreamer(source='teams.pcap').to_pandas()[["src_ip",
                                                            "src_port",
                                                            "dst_ip", 
                                                            "dst_port", 
                                                            "protocol",
                                                            "bidirectional_packets",
                                                            "bidirectional_bytes",
                                                            "application_name"]]
my_dataframe.head(5)

Pandas

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,
                                                        columns_to_anonymize=(),
                                                        flows_per_file=0,
                                                        rotate_files=0)

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 w

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

Citation

NFStream paper is published in Computer Networks (COMNET). If you use NFStream in a scientific publication, we would appreciate citations to the following paper:

@article{AOUINI2022108719,
  title = {NFStream: A flexible network data analysis framework},
  author = {Aouini, Zied and Pekar, Adrian},
  doi = {10.1016/j.comnet.2021.108719},
  issn = {1389-1286},
  journal = {Computer Networks},
  pages = {108719},
  year = {2022},
  publisher = {Elsevier},
  volume = {204},
  url = {https://www.sciencedirect.com/science/article/pii/S1389128621005739}
}

Authors

The following people contributed to NFStream:

Supporting organizations

The following organizations are supporting NFStream:

sah tuke ntop nmap

Publications that use NFStream

License

This project is licensed under the LGPLv3 License - see the License file for 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.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (1.2 MB view details)

Uploaded PyPy macOS 10.9+ x86-64

nfstream-6.5.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.7 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (3.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (1.2 MB view details)

Uploaded PyPy macOS 10.9+ x86-64

nfstream-6.5.1-pp36-pypy36_pp73-macosx_10_7_x86_64.whl (1.2 MB view details)

Uploaded PyPy macOS 10.7+ x86-64

nfstream-6.5.1-cp310-cp310-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.10 Windows x86-64

nfstream-6.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-cp39-cp39-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.9 Windows x86-64

nfstream-6.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-cp39-cp39-macosx_10_15_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.9 macOS 10.15+ x86-64

nfstream-6.5.1-cp38-cp38-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.8 Windows x86-64

nfstream-6.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-cp38-cp38-macosx_10_14_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

nfstream-6.5.1-cp37-cp37m-win_amd64.whl (1.8 MB view details)

Uploaded CPython 3.7m Windows x86-64

nfstream-6.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-cp37-cp37m-macosx_10_14_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.7m macOS 10.14+ x86-64

nfstream-6.5.1-cp36-cp36m-win_amd64.whl (1.9 MB view details)

Uploaded CPython 3.6m Windows x86-64

nfstream-6.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.24+ x86-64

nfstream-6.5.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ARM64 manylinux: glibc 2.24+ ARM64

nfstream-6.5.1-cp36-cp36m-macosx_10_14_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.6m macOS 10.14+ x86-64

File details

Details for the file nfstream-6.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 91268f96f27a1ac040c25693be26d8108a7f059386455973c33c392ef6e22de8
MD5 b48b6da2d50e1e41c079613232ddb7af
BLAKE2b-256 d7c06e64a4f019bc1d4fbbc616ed95f0e61d24ebbade30f051300498cf30864b

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 1b4d5da4285b268e822217348ccac6703fa111846d2e27ddd2a1ffcfdf74f71e
MD5 be5f68e11673185f4a71ad615c988a18
BLAKE2b-256 c34723d018ab9f5f02f1847c2e9397f8e137e01a3bb0d0d6daaf20d5d069a970

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 9f4810ce1f3e1a89050a93ad6afb53c67c870106500ab4d6a48814e052252511
MD5 19ef140284313772329ca8f2d88dfb71
BLAKE2b-256 773b305fc1d9709476f7fdf9a4494b1802c4fe2263b9c6aa89f1454ec6ceee95

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 d85c8b89e0021d377672fac3f107c78d19780539ef737b23ee12e8b3e167bc56
MD5 a1fa91c34979fbca01e111dbd31d7d04
BLAKE2b-256 d9a4055310ea4ac81aa466b956fefc9e059f36a87df4e04fd518875fec8894b9

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9617830f0a403b7beac99b976984bf0180216cfd44acd9c03ee2a1eae4b1643d
MD5 be0a9e346e6f375bc87f355f9103dffe
BLAKE2b-256 e1ffa461006f88af33a1901f38c707487998cf7c0a9a264829d7d668e044a44a

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 cddcee599544065cf7424f182dbdaa637f39bae6b7c77a43c0db2824c06e1ad4
MD5 530a9de9fd1e632451cff560d533b086
BLAKE2b-256 64f5386ba1e422b0e3851f5c3f41710679bc67815288f46eab1c0d73131cab4f

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 71ef24e4a4ce03d0227c44e014f3d2c83dc401d1aac51e3979dd21cb25adf442
MD5 f36dbb5758131777dd28ef525754d24f
BLAKE2b-256 bacd31fb4b08f11391c3e97236416fd02f45a7059d0a867b30b07a1e9e29c87e

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ac5fefe3bfa90db66bfb2aaf134bc3b0a5e87c126fcdb25ea3cc434f91b88381
MD5 cbee2c50bd0c240162129b7d2285f1da
BLAKE2b-256 af1167250a176335a74aec019ad9f4e202fc74a3dda3a51b3e7e16fbef139578

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-pp36-pypy36_pp73-macosx_10_7_x86_64.whl.

File metadata

  • Download URL: nfstream-6.5.1-pp36-pypy36_pp73-macosx_10_7_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: PyPy, macOS 10.7+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.4 PyPy/7.3.3

File hashes

Hashes for nfstream-6.5.1-pp36-pypy36_pp73-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 df663cd48507027726eac21ade1041d7113642b2da674db467cf6ba65c7870ca
MD5 3f999620955fcbf83dd5eb02672643dc
BLAKE2b-256 f3979e26afb3138ee5dc5ac0c61886d110498dd7e58e39119e61c6bd85da632b

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 859c3ab66941b474c9019e676a1f544dad12841560e8a9ca3ebb0a9b4ac670c3
MD5 8bbeda6e320983a59595e3fdf45dd13d
BLAKE2b-256 89092d356f827b80a61e79c4b83f831805c4245598b8235263fdf980c39f4348

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 db4851d3d258b179d01b00b938924475b598b9e4ec01efc57c7893f54e9975ea
MD5 76ae0cf31022269ed3bdf0bd065b940c
BLAKE2b-256 94f669d1836b8fd848992b925211fbfc196d35e5fffdaa676e328af09d00eef4

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 95343abfdf8ea7ab56f5e0dc58df948cf508f892780ebfbe9945ce126a565535
MD5 799fed4bf9189119a9391d001da8de54
BLAKE2b-256 b3a21d1ccecc3e9a6b0649aba54c3e0e984d1d543702786dc7397eac9aaddcd7

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: nfstream-6.5.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.9.12

File hashes

Hashes for nfstream-6.5.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 98e9f0a365739dd3cb7b56b150e2f759a6fcd89374a420f08044f68e93d9bcc9
MD5 37360c0efbc93a15452dd96720da2596
BLAKE2b-256 90c5a0f89e3dddcc5b861a20f01f9b8153c051a3399280a7beeed85bc25f7947

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 20ef5420813ed2bf31fe111e1dfb471be9124d2f3848224ed43503c33a80c21c
MD5 4d8355175b72346ccc6ac8aff3e06663
BLAKE2b-256 4ee186dfec40a61101d2297847183b6d5664222622a4cc014fbffc9fae50a154

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 bdf0becd583d0d14146e773bcb1845264d3c865dd0933b9055765a5c5e3c77b4
MD5 0639132e70f01810d0f7c7cec77c9c7e
BLAKE2b-256 1edf9d082a80aa76d50de209c4cb4aa697f3fee519c078c3a437b7dd7529d220

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 e083b0822b316f78478b2a62205d5aadc55bca60d30f0fa14e5caa6403018454
MD5 cf236de02bb6818bc347799ed993b943
BLAKE2b-256 c8ea2579b5e52781c1e05439750142ee63ba6b2f4b007b976e08442253669296

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: nfstream-6.5.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.8.10

File hashes

Hashes for nfstream-6.5.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 7d0f296ce225aea0c52aa38daef77d6410ac5cfac75db62cdfce6261e5fa68e9
MD5 f7152bfc2826907d53ec636006d125dd
BLAKE2b-256 0565600aa7a61f62effe3f1039cd26948fb11e8a5638c110fd0aee6bf6c863af

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 660615039d533a1e8177efae4bb39da77163ccd550dcf6525cf45abd1466ee17
MD5 a8d5f9a70e727be1183e60a430cb508c
BLAKE2b-256 8aefe0949626a6fe82b4345545c48160cc64ab6270791ba3525c63dbab2aae6d

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 4cf2744d6b49650cdc4f49d6995a04dad5bb752a204cccf8117fe13e6ce27b7f
MD5 d9c1be149dc55b1893babdf186fb86d0
BLAKE2b-256 b4d0c111daece45543787142da06a1ad078e2b1e783aaea4ac4a26d3ac92e7ef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nfstream-6.5.1-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 303f96e550e775d6ab11b836b1900d9549cbc21ced03eedf547d6775d56f34dd
MD5 73435b2337118421eabd6d5f83a9d1ac
BLAKE2b-256 33e6aa88b078465b23d398c99081a89c16ce66db1c13dc5f8ef3db77288e1261

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: nfstream-6.5.1-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.7.9

File hashes

Hashes for nfstream-6.5.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 549a16d8bc11c2669999c26b9f519fe9b64b1b8e9a1df136627f4e63edb265f9
MD5 b32949fef30e5c59dc681ce8ff6ef353
BLAKE2b-256 eb6c177a4ab359b851c5e60f09f3fde80b37645e5a4f452dd5141ac0f555627c

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 577f0a0693e2704a9865bc04c72f1ac4ddb66d1e8f2a0340d1ecd640107bd311
MD5 6c3425b64619617521f75d90f0e6ee77
BLAKE2b-256 f1f012da803248b863faef0ebd00fcb100d2a8364c710a3d90d2cce1988f510f

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 e0bacc92c6934e5ffa6b5f6547c6e908ca27f7c635695a320b387283e5b7668c
MD5 604eda263a168cb4c67c7035feed2c9e
BLAKE2b-256 ed6cb53d542e3a941bef2c75bec66fcc86b85de2308fdd1131869a5c17e61087

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nfstream-6.5.1-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 7388fbb338bb4dfa8582fe3635a1bbb8c686184c2a4d7c402ce4518796b778dd
MD5 499cfb17c87277376b8a38935cc0805c
BLAKE2b-256 5e960b81b772fbd7181be85e83e1f07f31b33e689cdc2a4cf9dc26b7ef53a6fc

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: nfstream-6.5.1-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.4 CPython/3.6.8

File hashes

Hashes for nfstream-6.5.1-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 0241cce03354a69bca382176c24d9cfd8c1982692c8c6d5f5dd9c6961f806e80
MD5 c29bf97b3625faee96f709782e01a087
BLAKE2b-256 fe6bab3d418b5bb891f5f58f7cb53dfdbdb43c9b03a2ec4ccb225047b9a48004

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
Algorithm Hash digest
SHA256 0d138924e5377f21898f315d76a89ff6b9caf5ca219e67f1009a15443f9e9d73
MD5 e185aa10e83c3100706c7266f4ec69b9
BLAKE2b-256 9e76cfcdf8ecbe1944cbe5dc897e6887c9fc0bca922fc1b12ad6fde652b64f45

See more details on using hashes here.

File details

Details for the file nfstream-6.5.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for nfstream-6.5.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 bece2c1cba555f17753c9ceaf445ad3dc85e7c06a1e2706c1fe6a93a824384a3
MD5 cf71fc0e4f4423e89299d33a41673545
BLAKE2b-256 1ba007b93538a46c787ecf8b99b56a60b0cdc09d427022437e717d0f8dda92ac

See more details on using hashes here.

File details

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

File metadata

  • Download URL: nfstream-6.5.1-cp36-cp36m-macosx_10_14_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.6m, macOS 10.14+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.64.0 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.4 CPython/3.6.15

File hashes

Hashes for nfstream-6.5.1-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 93492ab74bf1753aaad0665a79748092ac8a69c02015ce5638bfa342acfb4090
MD5 1f5aaffa0b8c8c7822a9a0c17b816fdb
BLAKE2b-256 2b18d25728ae8be931d78b97b0a03f25f7373e9e1e260aa0a22fc83e87e375c6

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