NFStream adalah kerangka kerja Python multiplatform yang menyediakan struktur data cepat, fleksibel, dan ekspresif yang dirancang untuk membuat bekerja dengan data jaringan online atau offline menjadi mudah dan intuitif. Ini bertujuan untuk menjadi landasan dasar Python tingkat tinggi untuk melakukan analisis data aliran jaringan dunia nyata yang praktis. Selain itu, ia memiliki tujuan yang lebih luas untuk menjadi kerangka kerja analisis data jaringan yang menyatukan bagi para peneliti yang menyediakan reproduktifitas data di seluruh eksperimen.
Buku Catatan Langsung | |
Situs Proyek | |
Saluran Diskusi | |
Rilis Terbaru | |
Versi yang Didukung | |
Lisensi Proyek | |
Integrasi Berkelanjutan | |
Kualitas Kode |
Fitur Utama
Bagaimana cara mendapatkannya?
Bagaimana cara menggunakannya?
Melatih model
Streamer bertenaga ML pada lalu lintas langsung
Identifikasi aplikasi terenkripsi dan ekstraksi metadata
Visibilitas sistem
Ekstraksi fitur aliran statistik post-mortem
Ekstraksi fitur aliran statistik awal
Antarmuka ekspor Panda
Antarmuka ekspor CSV
Memperluas NFStream
Pelatihan dan penerapan model Machine Learning
Membangun dari sumber
Berkontribusi
Etika
Kredit
Kutipan
Penulis
Organisasi pendukung
Publikasi yang menggunakan NFStream
Lisensi
Performa: NFStream dirancang agar cepat: AF_PACKET_V3/FANOUT di Linux, multiprosesor, mesin komputasi berbasis CFFI asli, dan dukungan penuh PyPy .
Visibilitas lapisan-7 terenkripsi: Inspeksi paket mendalam NFStream didasarkan pada nDPI . Hal ini memungkinkan NFStream untuk melakukan identifikasi aplikasi terenkripsi dan sidik jari metadata yang andal (misalnya TLS, SSH, DHCP, HTTP).
Visibilitas sistem: NFStream menyelidiki kernel sistem yang dipantau untuk mendapatkan informasi tentang soket Internet terbuka dan mengumpulkan jaminan kebenaran dasar (nama proses, PID, dll.) di tingkat aplikasi.
Ekstraksi fitur statistik: NFStream menyediakan ekstraksi fitur statistik berbasis aliran yang canggih. Ini mencakup fitur statistik post-mortem (misalnya, minimum, mean, standar deviasi, dan maksimum ukuran paket dan waktu antar kedatangan) dan fitur aliran awal (misalnya urutan n ukuran paket pertama, waktu antar kedatangan, dan arah).
Fleksibilitas: NFStream mudah diperluas menggunakan NFPlugins . Ini memungkinkan pembuatan fitur aliran baru dalam beberapa baris Python.
Berorientasi Pembelajaran Mesin: NFStream bertujuan untuk membuat Pendekatan Pembelajaran Mesin untuk manajemen lalu lintas jaringan dapat direproduksi dan diterapkan. Dengan menggunakan NFStream sebagai kerangka kerja umum, peneliti memastikan bahwa model dilatih menggunakan logika komputasi fitur yang sama, sehingga perbandingan yang adil dapat dilakukan. Selain itu, model terlatih dapat diterapkan dan dievaluasi pada jaringan langsung menggunakan NFPlugins .
Pemasang biner untuk versi rilis terbaru tersedia di Pypi.
pip instal nfstream
Catatan Windows : NFStream tidak menyertakan driver capture pada Windows (pembatasan lisensi). Diperlukan untuk menginstal driver Npcap sebelum menginstal NFStream. Jika Wireshark sudah terinstal di Windows, maka driver Npcap sudah terinstal, dan Anda tidak perlu melakukan tindakan tambahan apa pun.
Berurusan dengan file pcap besar dan ingin menggabungkannya ke dalam aliran jaringan berlabel? NFStream membuat jalur ini lebih mudah dalam beberapa baris:
from nfstream import NFStreamer# Kami menampilkan semua parameter streamer dengan nilai defaultnya.# Lihat dokumentasi untuk informasi detail tentang setiap parameter.# https://www.nfstream.org/docs/api#nfstreamermy_streamer = NFStreamer(source="facebook.pcap ", # atau antarmuka jaringan langsung decode_tunnels=True, bpf_filter=Tidak ada, promiscuous_mode=True, snapshot_length=1536, idle_timeout=120, active_timeout=1800, mode_akuntansi=0, udps=Tidak ada, n_dissections=20, analisis_statistik=Salah, splt_analisis=0, n_meters=0, max_nflows=0, laporan_kinerja=0, mode_visibilitas_sistem=0, sistem_visibilitas_poll_ms=100) untuk aliran di my_streamer:print(flow) # cetaklah.
# Lihat dokumentasi untuk setiap deskripsi detail fitur.# https://www.nfstream.org/docs/api#nflowNFlow(id=0, expired_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, protokol=6, ip_version=4, vlan_id=0, terowongan_id=0, dua arah_first_seen_ms=1472393122365, dua arah_last_seen_ms=1472393123665, dua arah_duration_ms=1300, dua arah_packets=19, dua arah_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_confident=4, diminta_server_name='facebook.com', client_fingerprint='bfcc1a3891601edb4f137ab7ab25b840', server_fingerprint='2d1eb5817ece335c24904f516ad5da12', user_agent='', content_type='')
NFStream menyelidiki kernel sistem yang dipantau untuk mendapatkan informasi tentang soket Internet terbuka dan mengumpulkan jaminan kebenaran dasar (nama proses, PID, dll.) di tingkat aplikasi.
from nfstream import NFStreamermy_streamer = NFStreamer(source="Intel(R) Wi-Fi 6 AX200 160MHz", # Mode pengambilan langsung. # Nonaktifkan pembedahan L7 untuk tujuan keterbacaan saja. n_dissections=0, system_visibility_poll_ms=100, system_visibility_mode=1) untuk aliran di my_streamer:print(flow) # cetaklah.
# Lihat dokumentasi untuk setiap deskripsi detail fitur.# https://www.nfstream.org/docs/api#nflowNFlow(id=0, expired_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, protokol=6, ip_version=4, vlan_id=0, terowongan_id=0, dua arah_first_seen_ms=1638966705265, dua arah_last_seen_ms=1638966706999, dua arah_duration_ms=1734, dua arah_packets=98, dua arah_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, # Proses yang menghasilkan alur yang dilaporkan ini system_process_pid=14596, system_process_name='FortniteClient-Win64-Shipping.exe')
NFStream melakukan 48 ekstraksi fitur statistik aliran post-mortem, yang mencakup analisis flag TCP terperinci, deviasi minimum, rata-rata, maksimum, dan standar dari ukuran paket dan waktu antar kedatangan di setiap arah.
from nfstream import NFStreamermy_streamer = NFStreamer(source="facebook.pcap", # Nonaktifkan pembedahan L7 agar mudah dibaca. n_dissections=0, statistic_analisis=Benar)untuk aliran di my_streamer:print(aliran)
# Lihat dokumentasi untuk setiap deskripsi detail fitur.# https://www.nfstream.org/docs/api#nflowNFlow(id=0, expired_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, protokol=6, ip_version=4, vlan_id=0, terowongan_id=0, dua arah_first_seen_ms=1472393122365, dua arah_last_seen_ms=1472393123665, dua arah_duration_ms=1300, dua arah_packets=19, dua arah_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, dua arah_min_ps=66, dua arah_mean_ps=302.36842105263156, dua arah_stddev_ps=425.53315715259754, dua arah_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, dua arah_min_piat_ms=0, dua arah_mean_piat_ms=72.222222222222223, dua arah_stddev_piat_ms=137.34994188549086, dua arah_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, dua arah_syn_packets=2, dua arah_cwr_packets=0, dua arah_ece_packets=0, dua arah_urg_packets=0, dua arah_ack_packets=18, dua arah_psh_packets=9, dua arah_rst_packets=0, dua arah_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 melakukan ekstraksi fitur statistik aliran awal (hingga 255 paket) (disebut sebagai analisis SPLT dalam literatur). Ini diringkas sebagai urutan arah, ukuran, dan waktu antar kedatangan paket-paket ini.
from nfstream import NFStreamermy_streamer = NFStreamer(source="facebook.pcap", # Kami menonaktifkan pembedahan l7 untuk tujuan keterbacaan. n_dissections=0, splt_analisis=10)untuk aliran di my_streamer:print(flow)
# Lihat dokumentasi untuk setiap deskripsi detail fitur.# https://www.nfstream.org/docs/api#nflowNFlow(id=0, expired_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, protokol=6, ip_version=4, vlan_id=0, terowongan_id=0, dua arah_first_seen_ms=1472393122365, dua arah_last_seen_ms=1472393123665, dua arah_duration_ms=1300, dua arah_packets=19, dua arah_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, # Urutan 10 arah paket pertama, ukuran dan waktu antar kedatangan. 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 secara asli mendukung Pandas sebagai antarmuka ekspor.
# Lihat dokumentasi untuk rincian lebih lanjut.# 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", "protokol","paket_biarah","byte_biarah","nama_aplikasi"]]bingkai_datasaya.head(5)
NFStream secara asli mendukung format file CSV sebagai antarmuka ekspor.
# Lihat dokumentasi untuk rincian lebih lanjut.# https://www.nfstream.org/docs/api#csv-file-conversionflows_count = NFStreamer(source='facebook.pcap').to_csv(path=None,columns_to_anonymize=(), arus_per_file=0,putar_file=0)
Tidak menemukan fitur aliran tertentu? tambahkan plugin ke NFStream dalam beberapa baris:
dari nfstream import NFPluginclass MyCustomPktSizeFeature(NFPlugin):def on_init(self, packet, flow):# pembuatan aliran dengan paket pertamaif 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):# pembaruan aliran dengan setiap paket milik aliran if packet.raw_size == self.custom_size:flow.udps.packet_with_custom_size += 1exended_streamer = NFStreamer(source='facebook.pcap', udps=MyCustomPktSizeFeature(custom_size=555))untuk aliran di extended_streamer:# lihat metrik yang Anda buat secara dinamis di flowprint yang dihasilkan(flow.udps.packet_with_custom_size)
Contoh sederhana berikut menunjukkan cara melatih dan menerapkan pendekatan pembelajaran mesin untuk kategorisasi arus lalu lintas. Kami ingin menjalankan klasifikasi aliran kategori Jejaring Sosial berdasarkan paket_biarah dan byte_biarah sebagai fitur masukan. Agar singkatnya, kami memutuskan untuk memprediksi hanya pada tahap berakhirnya aliran.
dari 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(lambda x: 1 jika 'Jaringan Sosial' di x lain 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):# Anda dapat melakukan hal yang sama di titik masuk on_update dan memaksa kedaluwarsa dengan id khusus. 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))untuk aliran masuk ml_streamer:print(flow.udps.model_prediction)
Contoh dan detail NFPlugin selengkapnya disediakan di dokumentasi resmi. Anda juga dapat menguji NFStream tanpa instalasi menggunakan notebook demo langsung kami.
Untuk membangun NFStream dari sumber, silakan baca panduan instalasi yang disediakan dalam dokumentasi resmi.
Silakan baca Berkontribusi untuk rincian tentang kode etik kami dan proses pengajuan permintaan penarikan kepada kami.
NFStream ditujukan untuk penelitian data jaringan dan forensik. Peneliti dan ilmuwan data jaringan dapat menggunakan kerangka kerja ini untuk membangun kumpulan data yang andal serta melatih dan mengevaluasi model pembelajaran mesin yang diterapkan pada jaringan. Seperti halnya alat pemantauan paket lainnya, NFStream dapat disalahgunakan. Jangan menjalankannya di jaringan mana pun yang bukan milik atau administrasi Anda .
Makalah NFStream diterbitkan di Computer Networks (COMNET) . Jika Anda menggunakan NFStream dalam publikasi ilmiah, kami sangat menghargai kutipan artikel berikut:
@artikel{AOUINI2022108719, title = {NFStream: Kerangka analisis data jaringan yang fleksibel}, penulis = {Aouini, Zied dan Pekar, Adrian}, doi = {10.1016/j.comnet.2021.108719}, issn = {1389-1286}, jurnal = {Jaringan Komputer}, halaman = {108719}, tahun = {2022}, penerbit = {Elsevier}, volume = {204}, url = {https://www.sciencedirect.com/science/article/pii/S1389128621005739} }
Orang-orang berikut berkontribusi pada NFStream:
Zied Aouini : Pencipta dan pengembang inti.
Adrian Pekar : Pembuatan dan penyimpanan kumpulan data.
Romain Picard : Implementasi plugin MDNS dan DHCP.
Radion Bikmukhamedov : Pekerjaan awal pada analisis SPLT NFPlugin.
Organisasi berikut mendukung NFStream:
SoftAtHome : Pendukung pengembangan NFStream.
Technical University of Košice : Perangkat keras dan infrastruktur untuk pembuatan dan penyimpanan kumpulan data.
ntop : Dukungan teknis integrasi nDPI .
Proyek Nmap : Dukungan teknis integrasi Npcap (penginstal OEM NPCAP pada Windows CI).
Google OSS Fuzz : Dukungan pengujian fuzzing berkelanjutan untuk proyek NFStream.
Arsitektur Hirarki dan Strategi Probabilistik untuk Deteksi Intrusi Kolaboratif
Kerangka Kerja Sumber Terbuka untuk Internet Terenkripsi dan Klasifikasi Lalu Lintas Berbahaya
ConFlow: Aliran Jaringan Kontras Meningkatkan Pembelajaran Ketidakseimbangan Kelas dalam Deteksi Intrusi Jaringan
Pembelajaran Berkelanjutan untuk Deteksi Intrusi Jaringan berbasis Anomali
Sistem yang aman sendiri berdasarkan jaringan yang ditentukan perangkat lunak
Autoencoder Variasi yang Kuat dan Aliran Normalisasi untuk Deteksi Anomali Jaringan Tanpa Pengawasan
RADON: Autoencoder yang Kuat untuk Deteksi Anomali Tanpa Pengawasan
Pendekatan Pembelajaran Mesin Generik untuk Identifikasi Perangkat IoT
Pemeringkatan Perangkat Jaringan untuk Prioritas Alarm: Studi Kasus Deteksi Intrusi
Deteksi Malware Berbasis Aliran Jaringan Menggunakan Pendekatan Gabungan Perayapan dan Pembelajaran Mendalam
Deteksi Intrusi Jaringan Berdasarkan Kecerdasan Buatan Terdistribusi yang Dapat Dipercaya
Kerangka Transformator Generatif Untuk Pembuatan dan Klasifikasi Lalu Lintas Jaringan
Generator dan Pengklasifikasi Lalu Lintas Jaringan Multi-Kelas Berdasarkan Jaringan Syaraf Tiruan
Menggunakan Seleksi Fitur Tertanam dan CNN untuk Klasifikasi pada CCD-INID-V1 Kumpulan Data IoT Baru
Suatu Pendekatan Berdasarkan Jaringan yang Ditentukan Pengetahuan untuk Mengidentifikasi Aliran Streaming Video di Jaringan 5G
Penemuan Pengetahuan: Bisakah Ini Memberikan Penjelasan Baru tentang Definisi Ambang Batas untuk Deteksi Pukulan Berat?
Mengumpulkan dan menganalisis lalu lintas simpul keluar Tor
Analisis dan Pengumpulan Data dari Jaringan IP
Proyek ini dilisensikan di bawah Lisensi LGPLv3 - lihat file Lisensi untuk detailnya