NFStream は、オンラインまたはオフラインのネットワーク データを簡単かつ直感的に操作できるように設計された、高速かつ柔軟で表現力豊かなデータ構造を提供するマルチプラットフォームの Python フレームワークです。これは、実践的な現実世界のネットワーク フロー データ分析を行うための、Python の基本的な高レベルの構築ブロックとなることを目指しています。さらに、実験全体でデータの再現性を提供する研究者向けの統合ネットワーク データ分析フレームワークになるという、より広範な目標もあります。
ライブノートブック | |
プロジェクトのウェブサイト | |
ディスカッションチャンネル | |
最新リリース | |
サポートされているバージョン | |
プロジェクトライセンス | |
継続的インテグレーション | |
コードの品質 |
主な特長
入手方法は?
使い方は?
モデルのトレーニング
ML を利用したライブトラフィック上のストリーマー
暗号化されたアプリケーションの識別とメタデータの抽出
システムの可視性
事後統計フロー特徴抽出
初期の統計的フロー特徴抽出
パンダのエクスポートインターフェイス
CSVエクスポートインターフェース
NFStreamの拡張
機械学習モデルのトレーニングとデプロイメント
ソースから構築する
貢献する
倫理
クレジット
引用
著者
後援団体
NFStream を使用する出版物
ライセンス
パフォーマンス: NFStream は高速になるように設計されています: Linux 上のAF_PACKET_V3/FANOUT 、マルチプロセッシング、ネイティブCFFI ベースの計算エンジン、およびPyPy の完全サポート。
暗号化されたレイヤー 7 の可視性: NFStream ディープ パケット インスペクションはnDPIに基づいています。これにより、NFStream は信頼性の高い暗号化されたアプリケーションの識別とメタデータのフィンガープリンティング (TLS、SSH、DHCP、HTTP など) を実行できるようになります。
システムの可視性: NFStream は、監視対象システムのカーネルを調査して、オープンなインターネット ソケットに関する情報を取得し、アプリケーション レベルで保証されたグラウンド トゥルース (プロセス名、PID など) を収集します。
統計的特徴抽出: NFStream は、最先端のフローベースの統計的特徴抽出を提供します。これには、事後統計的特徴 (例: パケット サイズと到着間隔の最小値、平均値、標準偏差、最大値) および初期フローの特徴 (例: 最初の n 個のパケット サイズのシーケンス、到着間隔、および方向) が含まれます。
柔軟性: NFStream は、 NFPlugins を使用して簡単に拡張できます。これにより、数行の Python 内で新しいフロー機能を作成できます。
機械学習指向: NFStream は、ネットワーク トラフィック管理のための機械学習アプローチを再現可能かつ展開可能にすることを目的としています。 NFStream を共通フレームワークとして使用することで、研究者はモデルが同じ特徴計算ロジックを使用してトレーニングされることを保証し、公平な比較が可能になります。さらに、 NFPlugin を使用して、トレーニングされたモデルをライブ ネットワーク上に展開して評価することができます。
最新リリース バージョンのバイナリ インストーラーは Pypi で入手できます。
pip インストール nfstream
Windows 注: NFStream には Windows 上のキャプチャ ドライバーが含まれていません (ライセンス制限)。 NFStream をインストールする前に、Npcap ドライバーをインストールする必要があります。 Wireshark が Windows にすでにインストールされている場合は、Npcap ドライバーがすでにインストールされているため、追加のアクションを実行する必要はありません。
大きな pcap ファイルを扱い、ラベル付きネットワーク フローに集約したいですか? NFStream を使用すると、このパスが数行で簡単になります。
from nfstream import NFStreamer# すべてのストリーマ パラメータをデフォルト値で表示します。# 各パラメータの詳細については、ドキュメントを参照してください。# https://www.nfstream.org/docs/api#nfstreamermy_streamer = NFStreamer(source="facebook.pcap ", # またはライブ ネットワーク インターフェイス decode_tunnels=True、bpf_filter=None、promiscuous_mode=True、snapshot_length=1536, idle_timeout = 120、active_timeout = 1800、accounting_mode = 0、udps = なし、n_dissections = 20、statistical_analysis = False、splt_analysis = 0、n_meters = 0、max_nflows = 0、performance_report = 0、system_visibility_mode = 0、system_visibility_poll_ms = 100) for flow in my_streamer:print(flow) # 印刷します。
# 各機能の詳細な説明についてはドキュメントを参照してください。# https://www.nfstream.org/docs/api#nflowNFlow(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、トンネルID=0、 bidirection_first_seen_ms=1472393122365、bidirection_last_seen_ms=1472393123665、bidirection_duration_ms=1300、bidirection_packets=19、bidirection_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='')
NFStream は、監視対象システムのカーネルを調査して、開いているインターネット ソケットに関する情報を取得し、アプリケーション レベルで保証されたグラウンド トゥルース (プロセス名、PID など) を収集します。
from nfstream import NFStreamermy_streamer = NFStreamer(source="インテル(R) Wi-Fi 6 AX200 160MHz", # ライブ キャプチャ モード。 # 読みやすさを目的としてのみ L7 解析を無効にします。n_dissections=0, system_visibility_poll_ms=100, system_visibility_mode=1) for flow in my_streamer:print(flow) # 印刷します。
# 各機能の詳細な説明についてはドキュメントを参照してください。# https://www.nfstream.org/docs/api#nflowNFlow(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、トンネルID=0、 bidirectional_first_seen_ms=1638966705265、bidirectional_last_seen_ms=1638966706999、bidirection_duration_ms=1734、bidirection_packets=98、bidirection_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, # この報告されたフローを生成したプロセス system_process_pid=14596, system_process_name='FortniteClient-Win64- Shipping.exe')。
NFStream は、詳細な TCP フラグ分析、パケット サイズと各方向の到着間隔時間の最小値、平均値、最大値、および標準偏差を含む 48 の事後フロー統計特徴抽出を実行します。
from nfstream import NFStreamermy_streamer = NFStreamer(source="facebook.pcap", # 読みやすさを目的として L7 解剖を無効にします。n_dissections=0, 統計的分析=True) my_streamer:print(flow) のフロー用
# 各機能の詳細な説明についてはドキュメントを参照してください。# https://www.nfstream.org/docs/api#nflowNFlow(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、トンネルID=0、 bidirection_first_seen_ms=1472393122365、bidirection_last_seen_ms=1472393123665、bidirection_duration_ms=1300、bidirection_packets=19、bidirection_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、bidirection_min_ps=66、bidirection_mean_ps=302.36842105263156、 bidirection_stddev_ps=425.53315715259754、bidirection_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、bidirection_min_piat_ms=0、 bidirectional_mean_piat_ms=72.22222222222223、bidirection_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、bidirection_syn_packets=2、bidirection_cwr_packets=0、bidirection_ece_packets=0、bidirection_urg_packets=0、bidirection_ack_packets=18、bidirection_psh_packets=9、 bidirection_rst_packets=0、bidirection_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)
NFStream は、初期 (最大 255 パケット) のフロー統計特徴抽出 (文献では SPLT 分析と呼ばれます) を実行します。これは、これらのパケットの方向、サイズ、到着間隔のシーケンスとして要約されます。
from nfstream import NFStreamermy_streamer = NFStreamer(source="facebook.pcap", # 読みやすさを目的として l7 dissection を無効にします。n_dissections=0, splt_analysis=10)my_streamer:print(flow) のフロー用
# 各機能の詳細な説明についてはドキュメントを参照してください。# https://www.nfstream.org/docs/api#nflowNFlow(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、トンネルID=0、 bidirection_first_seen_ms=1472393122365、bidirection_last_seen_ms=1472393123665、bidirection_duration_ms=1300、bidirection_packets=19、bidirection_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, # 10 個の最初のパケットの方向、サイズ、到着間隔のシーケンス。 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])
NFStream は、エクスポート インターフェイスとして Pandas をネイティブにサポートします。
# 詳細についてはドキュメントを参照してください。# https://www.nfstream.org/docs/api#pandas-dataframe-conversionfrom nfstream import NFStreamermy_dataframe = NFStreamer(source='teams.pcap').to_pandas()[["src_ip" ,"src_port","dst_ip", "dst_port", "プロトコル","双方向_パケット","双方向_バイト","アプリケーション名"]]my_dataframe.head(5)
NFStream は、エクスポート インターフェイスとして CSV ファイル形式をネイティブにサポートします。
# 詳細についてはドキュメントを参照してください。 # https://www.nfstream.org/docs/api#csv-file-conversionflows_count = NFStreamer(source='facebook.pcap').to_csv(path=None,columns_to_anonymize=(), flows_per_file=0、rotate_files=0)
特定のフロー機能が見つかりませんでしたか?数行でプラグインをNFStreamに追加します。
from nfstream import NFPluginclass MyCustomPktSizeFeature(NFPlugin):def on_init(self, packet, flow):# 最初のパケットでフローを作成if packet.raw_size == self.custom_size:flow.udps.packet_with_custom_size = 1else:flow.udps.packet_with_custom_size = 0 def on_update(self, packet, flow):# フローに属する各パケットのフロー更新 if packet.raw_size == self.custom_size:flow.udps.packet_with_custom_size += 1extended_streamer = NFStreamer(source='facebook.pcap', udps=MyCustomPktSizeFeature(custom_size=555))extended_streamer のフローの場合:# 生成されたフローで動的に作成されたメトリクスを参照してくださいprint(flow.udps.packet_with_custom_size)
次の単純な例は、トラフィック フロー分類のための機械学習アプローチをトレーニングおよび展開する方法を示しています。入力特徴として bidirection_packets と bidirection_bytes に基づいて、ソーシャル ネットワーク カテゴリ フローの分類を実行したいと考えています。簡潔にするために、フローの有効期限の段階でのみ予測することにします。
from nfstream import NFPlugin、NFStreamerimport numpyfrom sklearn.ensemble import RandomForestClassifierdf = NFStreamer(source="training_traffic.pcap").to_pandas()X = df[["bidirection_packets", "bidirection_bytes"]]y = df["application_category_name"]。 apply(ラムダ x: 1 if 'SocialNetwork' in x else 0)model = RandomForestClassifier()model.fit(X, y)
class ModelPrediction(NFPlugin):def on_init(self, packet, flow):flow.udps.model_prediction = 0def on_expire(self, flow):# on_update エントリポイントで同じことを実行し、カスタム ID で有効期限を強制することができます。 to_predict = numpy.array([flow.bidirection_packets, flow.bidirection_bytes]).reshape((1,-1))flow.udps.model_prediction = self.my_model.predict(to_predict)ml_streamer = NFStreamer(source="eth0", udps=ModelPrediction(my_model=model)) フローイン用ml_streamer:print(flow.udps.model_prediction)
NFPlugin のさらに多くの例と詳細は、公式ドキュメントで提供されています。ライブ デモ ノートブックを使用して、インストールせずに NFStream をテストすることもできます。
ソースからNFStream をビルドするには、公式ドキュメントに記載されているインストール ガイドをお読みください。
当社の行動規範とプルリクエストを当社に送信するプロセスの詳細については、 「貢献」をお読みください。
NFStream は、ネットワーク データの調査とフォレンジックを目的としています。研究者やネットワーク データ サイエンティストは、このフレームワークを使用して信頼性の高いデータセットを構築し、ネットワークに適用された機械学習モデルをトレーニングおよび評価できます。他のパケット監視ツールと同様に、 NFStream が悪用される可能性があります。自分が所有または管理していないネットワーク上では実行しないでください。
NFStream の論文はComputer Networks (COMNET)に掲載されています。科学出版物で NFStream を使用する場合は、次の記事を引用していただければ幸いです。
@article{AOUINI2022108719, title = {NFStream: 柔軟なネットワーク データ分析フレームワーク}, 著者 = {Aouini、Zied および Pekar、Adrian}、 ドイ = {10.1016/j.comnet.2021.108719}、 issn = {1389-1286}、 ジャーナル = {コンピュータ ネットワーク}、 ページ = {108719}、 年 = {2022}、 出版社 = {エルゼビア}、 ボリューム = {204}、 URL = {https://www.sciencedirect.com/science/article/pii/S1389128621005739} }
次の人々が NFStream に貢献しました。
Zied Aouini : クリエイター兼コア開発者。
Adrian Pekar : データセットの生成とストレージ。
Romain Picard : MDNS および DHCP プラグインの実装。
Radion Bikmkhamedov : SPLT 分析 NFPlugin に関する初期の作業。
次の組織が NFStream をサポートしました。
SoftAtHome : NFStream 開発のサポーター。
コシツェ工科大学: データセットの生成と保存のためのハードウェアとインフラストラクチャ。
ntop : nDPI統合の技術サポート。
Nmap プロジェクト: Npcap統合の技術サポート (Windows CI 上の NPCAP OEM インストーラー)。
Google OSS Fuzz : NFStream プロジェクトの継続的なファジング テストのサポート。
協調的な侵入検知のための階層アーキテクチャと確率論的戦略
暗号化されたインターネットと悪意のあるトラフィック分類のためのオープンソース フレームワーク
ConFlow: ネットワーク侵入検知におけるクラス不均衡学習を改善するネットワーク フローのコントラスト
異常ベースのネットワーク侵入検知のための継続学習
ソフトウェア定義ネットワークに基づく自己安全システム
監視されていないネットワーク異常検出のための堅牢な変分オートエンコーダと正規化フロー
RADON: 教師なし異常検出のための堅牢なオートエンコーダー
IoT デバイス識別のための一般的な機械学習アプローチ
アラームの優先順位付けのためのネットワーク デバイスのランキング: 侵入検知のケーススタディ
クロールとディープラーニングを組み合わせたアプローチを使用したネットワーク フロー ベースのマルウェア検出
信頼できる分散型人工知能に基づくネットワーク侵入検知
ネットワークトラフィックの生成と分類のための発電変圧器フレームワーク
ニューラル ネットワークに基づくマルチクラス ネットワーク トラフィック ジェネレーターと分類器
CCD-INID-V1 での分類に埋め込み特徴選択と CNN を使用する 新しい IoT データセット
5G ネットワークにおけるビデオ ストリーミング フローを識別するための知識定義型ネットワーキングに基づくアプローチ
知識の発見: ヘビーヒッター検出のしきい値定義に新たな光を当てることができるか?
Tor 出口ノードのトラフィックの収集と分析
IPネットワークからのデータの分析と収集
このプロジェクトは LGPLv3 ライセンスに基づいてライセンスされています - 詳細については、ライセンスファイルを参照してください。