NFStream是一個多平台 Python 框架,提供快速、靈活且富有表現力的資料結構,旨在使線上或離線網路資料的處理變得簡單直觀。它旨在成為 Python 的基本高級構建塊,用於進行實際的、真實的網路流資料分析。此外,它還有一個更廣泛的目標,即成為研究人員的統一網路資料分析框架,提供跨實驗的資料再現性。
即時筆記本 | |
專案網站 | |
討論頻道 | |
最新版本 | |
支援的版本 | |
專案許可 | |
持續集成 | |
代碼品質 |
主要特點
如何獲得?
如何使用?
訓練模型
ML 支援的即時流量串流媒體
加密應用程式識別和元資料提取
系統可視性
事後統計流特徵提取
早期統計流特徵提取
熊貓匯出接口
CSV匯出介面
擴充 NFStream
機器學習模型訓練與部署
從源頭構建
貢獻
倫理
製作人員
引文
作者
支持機構
使用 NFStream 的出版物
執照
效能: NFStream 的設計速度很快:Linux 上的AF_PACKET_V3/FANOUT 、多處理、基於本機 CFFI 的運算引擎以及PyPy 的全面支援。
加密的第 7 層可見性: NFStream 深度資料包偵測基於nDPI 。它允許 NFStream 執行可靠的加密應用程式識別和元資料指紋識別(例如 TLS、SSH、DHCP、HTTP)。
系統可見性: NFStream 探測受監控系統的內核,以獲取有關開放 Internet 套接字的信息,並在應用程式層級收集有保證的真實情況(進程名稱、PID 等)。
統計特徵提取: NFStream 提供最先進的基於流的統計特徵提取。它包括事後統計特徵(例如,資料包大小和到達間隔時間的最小值、平均值、標準偏差和最大值)和早期流特徵(例如,前n 個資料包大小的序列、到達間隔時間和方向) 。
靈活性: NFStream 可以使用NFPlugins輕鬆擴充。它允許在幾行 Python 內創建新的流程功能。
面向機器學習: NFStream 旨在使網路流量管理的機器學習方法可重複且可部署。透過使用 NFStream 作為通用框架,研究人員確保模型使用相同的特徵運算邏輯進行訓練,從而可以進行公平的比較。此外,可以使用NFPlugins在即時網路上部署和評估經過訓練的模型。
Pypi 上提供了最新發布版本的二進位安裝程式。
pip 安裝 nfstream
Windows 注意:NFStream 不包括 Windows 上的擷取驅動程式(授權限制)。安裝NFStream之前需要安裝Npcap驅動程式。如果 Windows 上已安裝 Wireshark,則已安裝 Npcap 驅動程序,您無需執行任何其他操作。
處理一個大的 pcap 檔案並想要聚合到標記的網路流? NFStream用幾行程式碼讓這條路徑變得更容易:
from nfstream import NFStreamer# 我們顯示所有流參數及其預設值。 。 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) # 列印它。
# 請參閱文件以了解每個功能的詳細描述。 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' ='98 :0c:82',dst_port = 443,協定= 6,ip_version = 4,vlan_id = 0,tunnel_id = 0,雙向_first_seen_ms = 1472393122365,雙向_last_seen_ms = 1472393122365,雙向_last_seen_ms = 1472393122365,131000ms_p ets = 19,雙向_位元組= 5745, , src2dst_first_seen_ms=1472393122365, src2dst_last_seen_ms=1472393123408、src2dst_duration_mrc10472393123408、src2dst_duration_rcs1043_detss1043_ds、pst _first_seen_ms=1472393122668、dst2src_last_seen_ms=147239312第3665章dst2src_duration_ms=997,dst2src_packets=10,dst2src_duration_ms=997,dst2src_packets=10,dst2src_bytes =4400,application_name='TLS.Facebook',application_category_name='社交網路', application_is_guessed=0,application_confidence=4,requested_server_name='facebook.com',client_fingerprint='bfcc1a3891601a='facebook.com',client_fingerprint='bfcc1a38916017560170541205 月ece335c24904f516ad5da12',user_agent='' ,content_type='')
NFStream 探測受監控系統的內核,以獲取有關開放 Internet 套接字的信息,並在應用程式層級收集有保證的真實資訊(進程名稱、PID 等)。
from nfstream import NFStreamermy_streamer = NFStreamer(source="Intel(R) Wi-Fi 6 AX200 160MHz", # 實時捕獲模式。# 僅出於可讀性目的禁用 L7 解剖。 n_dissections=0, system_visibility_poll_mssystem=10, de ) for flow in my_streamer:print(flow) # 列印它。
# 請參閱文件以了解每個功能的詳細描述。 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' ='98 :0c:82',dst_port = 443,協定= 6,ip_version = 4,vlan_id = 0,tunnel_id = 0,雙向_first_seen_ms = 1638966705265,雙向_last_seen_ms = 1638966705265,17067_packms_x片ets = 98,雙向_位元組= 4244, 64、src2dst_first_seen_ms=1638966705265, src2dst_last_seen_ms=1638966706999、src2dst_last_seen_ms=1638966706999、src2dst_duration_ms=1638966706999、src2dst_duration_pets=1638966706999、dpstst src_first_seen_ms=1638966705345、dst2src_last_seen_ms=16389667 06999, dst2src_duration_ms=1654, dst2src_packets=76, dst2src_bytes =421986, # 產生此報告流的進程system_process_pid=14596, system_process_name。
NFStream 執行 48 個事後流統計特徵提取,其中包括詳細的 TCP 標誌分析、資料包大小和每個方向的到達間隔時間的最小值、平均值、最大值和標準差。
from nfstream import NFStreamermy_streamer = NFStreamer(source="facebook.pcap", # 出於可讀性目的禁用 L7 解剖。n_dissections=0, istical_analysis=True)for flow in my_streamer:print(flow)
# 請參閱文件以了解每個功能的詳細描述。 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' ='98 :0c:82',dst_port = 443,協定= 6,ip_version = 4,vlan_id = 0,tunnel_id = 0,雙向_first_seen_ms = 1472393122365,雙向_last_seen_ms = 1472393122365,雙向_last_seen_ms = 1472393122365,131000ms_p ets = 19,雙向_位元組= 5745, , src2dst_first_seen_ms=1472393122365, src2dst_last_seen_ms=1472393123408、src2dst_duration_mrc10472393123408、src2dst_duration_rcs1043_detss1043_ds、pst _first_seen_ms=1472393122668、dst2src_last_seen_ms=147239312 3665,dst2src_duration_ms = 997,dst2src_packets = 10,dst2src_bytes = 4400,bi Direction_min_ps = 66,bi Direction_mean_ps = 302.36842105263156,bi Direction_stddev_ps = 425.53315715259754,bi Direction_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、 40.0,dst2src_stddev_ps = 549.7164925870628,dst2src_max_ps = 1454,雙向_min_piat_ms = 0,雙向_mean_piat_ms = 72.2222222222223,雙向_stddev_piat_ms = 137.34994188549086,雙orimtation_max_piorimtation=rc at_ms=130.375、src2dst_stddev_piat_ms=179.72036811192467、src2dst_max_piat_ms=415、dst2src_min_piat_ms=0、 0.7777777777777752777777777777777777777777777777777777777 月436397 、dst2src_max_piat_ms = 409、bi Direction_syn_packets = 2、bi Direction_cwr_packets = 0、bi Direction_ece_packets = 0、bi Direction_urg_packets = 0、bi Direction_ack_packets = 0、bi Direction_urg_packets = 0、bi Direction_ack_packets = 18、雙值_ syn_packets= 1、src2dst_cwr_packets=0、src2dst_ece_packets=0、src2dst_urg_packets=0、src2dst_ack_packets=8、、 src2dst_rst_packets=0、 src2dst_fin_packcets、dstst_packs_rcets=0、pack000,000 月、 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 解剖。n_dissections=0, splt_analysis=10)for flow in my_streamer:print(flow)
# 請參閱文件以了解每個功能的詳細描述。 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' ='98 :0c:82',dst_port = 443,協定= 6,ip_version = 4,vlan_id = 0,tunnel_id = 0,雙向_first_seen_ms = 1472393122365,雙向_last_seen_ms = 1472393122365,雙向_last_seen_ms = 1472393122365,131000ms_p ets = 19,雙向_位元組= 5745, , src2dst_first_seen_ms=1472393122365, src2dst_last_seen_ms=1472393123408、src2dst_duration_mrc10472393123408、src2dst_duration_rcs1043_detss1043_ds、pst _first_seen_ms=1472393122668、dst2src_last_seen_ms=147239312 3665, dst2src_duration_ms=997, dst2src_packets=10, 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_mslt_pi_ms [0, 303, 0, 0, 313, 0, 0, 0, 0, 1])
NFStream 本身支援 Pandas 作為導出介面。
# 有關更多詳細信息,請參閱文件。 ["src_ip" ,"src_port","dst_ip","dst_port","協定","bi Direction_packets","bi Direction_bytes","application_name"]]my_dataframe.head(5)
NFStream 本身支援 CSV 檔案格式作為導出介面。
# 有關更多詳細信息,請參閱文件。 =(), flow_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_cusmizesize)_withps. 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 = NFStreamercap(source='facebook.pp. ', udps=MyCustomPktSizeFeature(custom_size=555))for flow in Extended_streamer:# 查看產生的流中動態建立的指標print(flow.udps.packet_with_custom_size)
以下簡單範例示範如何訓練和部署用於交通流分類的機器學習方法。我們希望基於 bi Direction_packets 和 bi Direction_bytes 作為輸入特徵來運行社交網路類別流的分類。為了簡潔起見,我們決定僅在流到期階段進行預測。
從nfstream導入NFPlugin,NFStreamer導入numpy從sklearn.ensemble導入RandomForestClassifierdf = NFStreamer(source =“training_traffic.pcap”)。 [“application_category_name”]。
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.bi Direction_packets, flow.bi Direction_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,我們希望引用以下文章:
@文章{AOUINI2022108719, title = {NFStream:一種靈活的網路資料分析架構}, 作者 = {Aouini, Zied 和 Pekar, Adrian}, doi = {10.1016/j.comnet.2021.108719}, issn = {1389-1286}, 期刊 = {電腦網路}, 頁數 = {108719}, 年 = {2022}, 出版商={愛思唯爾}, 體積={204}, 網址 = {https://www.sciencedirect.com/science/article/pii/S1389128621005739} }
以下人員為 NFStream 做出了貢獻:
Zied Aouini :創建者和核心開發人員。
Adrian Pekar :資料集產生與儲存。
Romain Picard :MDNS 和 DHCP 外掛實作。
Radion Bikmukhamedov :SPLT 分析 NFPlugin 的初步工作。
以下組織支援 NFStream:
SoftAtHome :NFStream 開發的支持者。
科希策技術大學:用於資料集產生和儲存的硬體和基礎設施。
ntop : nDPI整合的技術支援。
Nmap 專案: Npcap整合的技術支援(Windows CI 上的 NPCAP OEM 安裝程式)。
Google OSS Fuzz :NFStream 專案的連續模糊測試支援。
協作入侵偵測的分層架構與機率策略
加密互聯網與惡意流量分類的開源框架
ConFlow:比較網路流改善網路入侵偵測中的類不平衡學習
基於異常的網路入侵偵測的持續學習
基於軟體定義網路的自安全系統
用於無監督網路異常檢測的穩健變分自動編碼器和標準化流程
RADON:用於無監督異常檢測的穩健自動編碼器
用於物聯網設備識別的通用機器學習方法
對網路設備進行警報優先排序:入侵偵測案例研究
使用爬行和深度學習相結合的方法進行基於網路流的惡意軟體檢測
基於分散式可信任人工智慧的網路入侵偵測
用於網路流量產生和分類的生成變壓器框架
基於神經網路的多類網路流量產生器和分類器
使用嵌入式特徵選擇和 CNN 對 CCD-INID-V1 新物聯網資料集進行分類
基於知識定義網路的 5G 網路視訊串流識別方法
知識發現:它能否為重量級偵測的閾值定義提供新的啟示?
收集和分析 Tor 出口節點流量
IP網路資料分析與擷取
該項目根據 LGPLv3 許可證獲得許可 - 有關詳細信息,請參閱許可證文件