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# 我们显示所有流参数及其默认值。# 有关每个参数的详细信息,请参阅文档。# https://www.nfstream.org/docs/api#nfstreamermy_streamer = NFStreamer(source="facebook.pcap ", # 或实时网络接口decode_tunnels=True, bpf_filter=None, promiscously_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,协议= 6,ip_version = 4,vlan_id = 0,隧道ID = 0, bidirection_first_seen_ms = 1472393122365,bidirection_last_seen_ms = 1472393123665,bidirection_duration_ms = 1300,biorient_packets = 19,bi Direction_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='社交网络'、application_is_guessed=0、application_confidence=4、 request_server_name='facebook.com', client_fingerprint='bfcc1a3891601edb4f137ab7ab25b840', server_fingerprint='2d1eb5817ece335c24904f516ad5da12', 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_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,协议= 6,ip_version = 4,vlan_id = 0,隧道ID = 0, bidirection_first_seen_ms = 1638966705265,bidirection_last_seen_ms = 1638966706999,bitropic_duration_ms = 1734,双向_packets = 98,biorient_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 执行 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)
# 请参阅文档了解每个功能的详细描述。# 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,协议= 6,ip_version = 4,vlan_id = 0,隧道ID = 0, bidirection_first_seen_ms = 1472393122365,bidirection_last_seen_ms = 1472393123665,bidirection_duration_ms = 1300,biorient_packets = 19,bi Direction_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,双向_min_ps = 66,双向_mean_ps = 302.36842105263156, bidirection_stddev_ps = 425.53315715259754,biometric_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,双向_min_piat_ms = 0, bidirection_mean_piat_ms = 72.22222222222223,biometric_stddev_piat_ms = 137.34994188549086,biometric_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,双向_syn_packets = 2,双向_cwr_packets = 0,双向_ece_packets = 0,双向_urg_packets = 0,双向_ack_packets = 18,双向_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 解剖。n_dissections=0, splt_analysis=10)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,协议= 6,ip_version = 4,vlan_id = 0,隧道ID = 0, bidirection_first_seen_ms = 1472393122365,bidirection_last_seen_ms = 1472393123665,bidirection_duration_ms = 1300,biorient_packets = 19,bi Direction_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=(), 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_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))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”)。to_pandas()X = df [[“双向数据包”,“双向字节”]]y = df [“application_category_name”]。应用(lambda x: 1 如果'社交网络' 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.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 许可证获得许可 - 有关详细信息,请参阅许可证文件