NFStream هو إطار عمل Python متعدد المنصات يوفر هياكل بيانات سريعة ومرنة ومعبرة مصممة لجعل العمل مع بيانات الشبكة عبر الإنترنت أو دون اتصال أمرًا سهلاً وبديهيًا. ويهدف إلى أن يكون لبنة البناء الأساسية عالية المستوى لبايثون لإجراء تحليل عملي لبيانات تدفق الشبكة في العالم الحقيقي . بالإضافة إلى ذلك، فإن لها هدفًا أوسع يتمثل في أن تصبح إطارًا موحدًا لتحليلات بيانات الشبكة للباحثين الذين يوفرون إمكانية تكرار البيانات عبر التجارب.
دفتر لايف | |
موقع المشروع | |
قناة المناقشة | |
أحدث إصدار | |
الإصدارات المدعومة | |
رخصة المشروع | |
التكامل المستمر | |
جودة الكود |
الميزات الرئيسية
كيفية الحصول عليه؟
كيفية استخدامه؟
تدريب النموذج
جهاز بث يعمل بتقنية ML على حركة المرور المباشرة
تعريف التطبيق المشفر واستخراج البيانات الوصفية
رؤية النظام
استخراج ميزات التدفق الإحصائي بعد الوفاة
استخراج ميزات التدفق الإحصائي المبكر
واجهة تصدير الباندا
واجهة تصدير CSV
تمديد NFStream
التدريب على نماذج التعلم الآلي ونشرها
البناء من المصادر
المساهمة
أخلاق مهنية
الاعتمادات
الاقتباس
المؤلفون
المنظمات الداعمة
المنشورات التي تستخدم NFSream
رخصة
الأداء: تم تصميم NFStream ليكون سريعًا: AF_PACKET_V3/FANOUT على Linux، والمعالجة المتعددة، ومحرك الحساب الأصلي المستند إلى CFFI ، والدعم الكامل لـ PyPy .
رؤية مشفرة للطبقة 7: يعتمد فحص الحزم العميق في NStream على nDPI . فهو يسمح لـ NStream بإجراء تعريف موثوق للتطبيقات المشفرة وبصمات البيانات الوصفية (مثل TLS وSSH وDHCP وHTTP).
رؤية النظام: يقوم NFStream باستكشاف نواة النظام الخاضع للمراقبة للحصول على معلومات حول مآخذ الإنترنت المفتوحة ويجمع الحقيقة الأرضية المضمونة (اسم العملية، PID، وما إلى ذلك) على مستوى التطبيق.
استخراج الميزات الإحصائية: يوفر NStream أحدث تقنيات استخراج الميزات الإحصائية القائمة على التدفق. وهي تشتمل على سمات إحصائية بعد الوفاة (على سبيل المثال، الحد الأدنى والمتوسط والانحراف المعياري والحد الأقصى لحجم الرزمة والوقت بين الوصول) وميزات التدفق المبكر (على سبيل المثال تسلسل أحجام الحزم الأولى وأوقات الوصول البيني والاتجاهات).
المرونة: يمكن توسيع NFPream بسهولة باستخدام NFPlugins . يسمح بإنشاء ميزة تدفق جديدة ضمن بضعة أسطر من لغة بايثون.
موجه نحو التعلم الآلي: يهدف NStream إلى جعل أساليب التعلم الآلي لإدارة حركة مرور الشبكة قابلة للتكرار والنشر. باستخدام NFStream كإطار مشترك، يضمن الباحثون أن النماذج يتم تدريبها باستخدام نفس منطق حساب الميزات، وبالتالي، من الممكن إجراء مقارنة عادلة. علاوة على ذلك، يمكن نشر النماذج المدربة وتقييمها على الشبكات الحية باستخدام NFPlugins .
تتوفر أدوات التثبيت الثنائية لأحدث إصدار على Pypi.
نقطة تثبيت nfstream
ملاحظات Windows : لا يتضمن NFStream برامج تشغيل الالتقاط على Windows (قيود الترخيص). يلزم تثبيت برامج تشغيل Npcap قبل تثبيت NFStream. إذا كان Wireshark مثبتًا بالفعل على نظام التشغيل Windows، فهذا يعني أن برامج تشغيل Npcap مثبتة بالفعل، ولن تحتاج إلى تنفيذ أي إجراء إضافي.
هل تتعامل مع ملف pcap كبير وتريد تجميعه في تدفقات الشبكة ذات العلامات؟ يجعل NStream هذا المسار أسهل في بضعة أسطر:
من nfstream import NFStreamer# نحن نعرض جميع معلمات جهاز البث بقيمها الافتراضية.# راجع الوثائق للحصول على معلومات مفصلة حول كل معلمة.# https://www.nfstream.org/docs/api#nfstreamermy_streamer = NFStreamer(source="facebook.pcap" "، # أو واجهة الشبكة المباشرة decode_tunnels=True، bpf_filter=لا شيء، promiscous_mode=True، snapshot_length = 1536، idle_timeout = 120، active_timeout = 1800، account_mode = 0، udps = لا شيء، n_dissections = 20، التحليل الإحصائي = خطأ، تحليل splt_ = 0، n_meters = 0، max_nflows = 0، تقرير الأداء = 0، system_visibility_mode = 0، system_visibility_poll_ms = 100) للتدفق في 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، 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, request_server_name='facebook.com', client_fingerprint='bfcc1a3891601edb4f137ab7ab25b840', server_fingerprint='2d1eb5817ece335c24904f516ad5da12', user_agent='', content_type='')
يقوم NStream بالتحقق من نواة النظام الخاضع للمراقبة للحصول على معلومات حول مآخذ الإنترنت المفتوحة ويجمع الحقيقة الأرضية المضمونة (اسم العملية، 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) للتدفق في 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، 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, # العملية التي أنشأت هذا التدفق المُبلغ عنه system_process_pid=14596, system_process_name='FortniteClient-Win64-Shipping.exe')
يقوم NStream بإجراء 48 عملية استخراج للميزات الإحصائية للتدفق بعد الوفاة، والتي تتضمن تحليلًا تفصيليًا لعلامات TCP، والحد الأدنى، والمتوسط، والحد الأقصى، والانحراف المعياري لكل من حجم الحزمة ووقت الوصول في كل اتجاه.
from nfstream import NFStreamermy_streamer = NFStreamer(source="facebook.pcap", # تعطيل تشريح L7 لغرض سهولة القراءة. n_dissections=0, التحليل الإحصائي = صحيح) للتدفق في my_streamer: طباعة (تدفق)
# راجع الوثائق الخاصة بالوصف التفصيلي لكل ميزة.# 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، 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)
يقوم NStream بإجراء استخراج الميزات الإحصائية للتدفق مبكرًا (ما يصل إلى 255 حزمة) (يُشار إليه بتحليل SPLT في الأدبيات). يتم تلخيصها كتسلسل لاتجاهات هذه الحزم وأحجامها وأوقات وصولها.
from nfstream import NFStreamermy_streamer = NFStreamer(source="facebook.pcap", # قمنا بتعطيل تشريح l7 لغرض سهولة القراءة. n_dissections=0, splt_analogy=10)forflow 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، 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, # تسلسل 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])
يدعم NStream أصلاً Pandas كواجهة تصدير.
# راجع الوثائق لمزيد من التفاصيل.# https://www.nfstream.org/docs/api#pandas-dataframe-conversionfrom nfstream import NFStreamermy_dataframe = NFSreamer(source='teams.pcap').to_pandas()[["src_ip" "src_port"، "dst_ip"، "dst_port"، "البروتوكول"، "حزم_ثنائية الاتجاه"، "بايتات_ثنائية الاتجاه"، "اسم_التطبيق"]]my_dataframe.head(5)
يدعم NStream أصلاً تنسيق ملف 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)
لم تجد ميزة تدفق محددة؟ أضف مكونًا إضافيًا إلى NStream في بضعة أسطر:
من nfstream استيراد NFPluginclass MyCustomPktSizeFeature(NFPlugin):def on_init(self, packet,flow):# إنشاء التدفق باستخدام الحزمة الأولى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 += 1extending_streamer = NFSreamer(source='facebook.pcap', udps=MyCustomPktSizeFeature(custom_size=555))للتدفق في Extend_streamer:# راجع المقياس الذي تم إنشاؤه ديناميكيًا في التدفقات التي تم إنشاؤها(flow.udps.packet_with_custom_size)
يوضح المثال المبسط التالي كيفية تدريب ونشر نهج التعلم الآلي لتصنيف تدفق حركة المرور. نريد إجراء تصنيف لتدفقات فئة الشبكة الاجتماعية استنادًا إلى الحزم الثنائية الاتجاه والبايتات الثنائية الاتجاه كميزات إدخال. ومن أجل الإيجاز، نقرر التنبؤ فقط في مرحلة انتهاء التدفق.
من nfstream استيراد NFPlugin، NFStreamerimport numpyfrom sklearn.ensemble import RandomForestClassifierdf = NFStreamer(source="training_traffic.pcap").to_pandas()X = df[["bidirectional_packets", "bidirectional_bytes"]]y = df["application_category_name"]. تطبيق (لامدا س: 1 إذا "SocialNetwork" في 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 وفرض انتهاء الصلاحية باستخدام المعرف المخصص. 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 = NFSreamer(source="eth0", udps=ModelPrediction(my_model=model)) للتدفق ml_streamer:طباعة (flow.udps.model_prediction)
يتم توفير المزيد من الأمثلة والتفاصيل الخاصة بـ NFPlugin في الوثائق الرسمية. يمكنك أيضًا اختبار NFSream بدون تثبيت باستخدام دفتر العرض التجريبي المباشر الخاص بنا.
لإنشاء NFSream من المصادر، يرجى قراءة دليل التثبيت الموجود في الوثائق الرسمية.
يرجى قراءة المساهمة للحصول على تفاصيل حول قواعد السلوك لدينا وعملية إرسال طلبات السحب إلينا.
تم تصميم NStream لأبحاث بيانات الشبكة والطب الشرعي. يمكن للباحثين وعلماء بيانات الشبكة استخدام هذا الإطار لبناء مجموعات بيانات موثوقة وتدريب وتقييم نماذج التعلم الآلي المطبقة على الشبكة. كما هو الحال مع أي أداة لمراقبة الحزم، يمكن إساءة استخدام NFStream . لا تقم بتشغيله على أي شبكة لا تملكها أو تديرها .
تم نشر ورقة NStream في شبكات الكمبيوتر (COMNET) . إذا كنت تستخدم NFSream في منشور علمي، فنحن نقدر الاستشهاد بالمقالة التالية:
@article{AOUINI2022108719, العنوان = {NFStream: إطار عمل مرن لتحليل بيانات الشبكة}، المؤلف = { عويني، زياد وبيكار، أدريان }، دوي = {10.1016/j.comnet.2021.108719}، الإصدار = {1389-1286}، مجلة = {شبكات الكمبيوتر}، الصفحات = {108719}، السنة = {2022}، الناشر = {السفير}، الحجم = {204}، عنوان URL = {https://www.sciencedirect.com/science/article/pii/S1389128621005739} }
ساهم الأشخاص التاليون في NFStream:
زياد عويني : منشئ ومطور أساسي.
أدريان بيكار : إنشاء مجموعات البيانات وتخزينها.
رومان بيكارد : تنفيذ المكونات الإضافية لـ MDNS وDHCP.
راديون بيكموخاميدوف : العمل الأولي على تحليل SPLT NFPlugin.
المنظمات التالية تدعم NFStream:
SoftAtHome : مؤيد لتطوير NFStream.
الجامعة التقنية في كوشيتسه : الأجهزة والبنية التحتية لإنشاء مجموعات البيانات وتخزينها.
ntop : الدعم الفني لتكامل nDPI .
مشروع Nmap : الدعم الفني لتكامل Npcap (مثبت NPCAP OEM على Windows CI).
Google OSS Fuzz : دعم اختبار التشويش المستمر لمشروع NFStream.
بنية هرمية واستراتيجية احتمالية للكشف عن التسلل التعاوني
إطار عمل مفتوح المصدر للإنترنت المشفر وتصنيف حركة المرور الضارة
ConFlow: تدفق الشبكة المتباين لتحسين التعلم غير المتوازن في الفصل في اكتشاف التسلل إلى الشبكة
التعلم المستمر لكشف التسلل إلى الشبكة القائم على الشذوذ
نظام آمن ذاتيًا يعتمد على شبكة محددة برمجيًا
أجهزة التشفير التلقائي المتغيرة القوية وتطبيع التدفقات للكشف عن شذوذ الشبكة غير الخاضعة للرقابة
RADON: جهاز تشفير تلقائي قوي للكشف عن الحالات الشاذة دون إشراف
نهج عام للتعلم الآلي لتحديد هوية أجهزة إنترنت الأشياء
تصنيف أجهزة الشبكة حسب أولويات الإنذار: دراسة حالة لكشف التسلل
اكتشاف البرامج الضارة المستندة إلى تدفقات الشبكة باستخدام نهج مشترك للزحف والتعلم العميق
كشف التسلل إلى الشبكة بناءً على الذكاء الاصطناعي الموزع الجدير بالثقة
إطار المحول التوليدي لتوليد حركة مرور الشبكة وتصنيفها
مولدات ومصنفات حركة مرور الشبكة متعددة الفئات بناءً على الشبكات العصبية
استخدام تحديد الميزات المضمنة وCNN للتصنيف على CCD-INID-V1 مجموعة بيانات جديدة لإنترنت الأشياء
نهج يعتمد على الشبكات المعرفة لتحديد تدفقات بث الفيديو في شبكات الجيل الخامس
اكتشاف المعرفة: هل يمكن أن يلقي ضوءًا جديدًا على تعريف الحد الأدنى للكشف عن الضربات الثقيلة؟
جمع وتحليل حركة مرور عقدة خروج Tor
تحليل وجمع البيانات من شبكة IP
تم ترخيص هذا المشروع بموجب ترخيص LGPLv3 - راجع ملف الترخيص للحصول على التفاصيل