Python analyserer pcap-datapakken, og eksporteres deretter til csv-fil

Python Parses Pcap Data Packet



Fordi oppdagelse av nettverkstopologi og identifikasjon av operativsystem oppnås ved å wireshark fanger kommunikasjonspakker på nettverket, vil jeg analysere pcap-datapakkene som er fanget av wireshark og trekke ut nettverksegenskapene og spesifikke verdier, og den lagres i csv-format. La meg endelig forstå prinsippet en ettermiddag.

1. Bruk SCAPY-modulen til å analysere pcap-pakker

Forsikre deg først om at scapy-biblioteket er installert i python. Hvis ikke, bruk: pip install scapy for å installere
For det andre, når du ringer til scapy-modulen, må du bruke fra scapy.all import * for å ringe den riktig.
Etter å ha lest den, vet vi at når scapy leser en pcap-fil, leser den faktisk en liste, som kan feilsøkes av kommandoen cmd-python, som vist i følgende figur:
bilde
Vi kan se fra bildet, fordi pcap-pakken inneholder mange datapakker, slik at pkts som er lest inn representerer alle dataene i pcap-pakken, og pkts [i] betyr i pcap. De i-dataene i eksemplet i figuren er: Jeg lagret den filtrerte datapakken som bare inneholder TCP-protokollen i wireshark, så det jeg fikk er en datapakke som inneholder en TCP-protokoll, hvis du vil vite hver pakke. Det spesifikke formatet kan vises gjennom show () -funksjonen. For å trekke ut verdien til et bestemt nettverksattributt i hver pakke, bruk pkts [i] [
Felt med tilsvarende struktur — TCP-korrespondanse: ‘Ethernet’, ‘IPv6’, ‘TCP’]. Spesifikke attributtnavn vises i følgende kode:



from scapy.all import * pkts = rdpcap('tcp02.pcap') pkt0=pkt[0] dst=pkt0['Ethernet'].dst version = pkt0['IPv6'].version sport = pkt0['TCP'].sport

2. Importer dataene i pcap-pakken til csv-filen

Følgende er utvinning av nettverksegenskapene til en datapakke, koden er som følger:



import csv from scapy.all import * pkts = rdpcap('tcp02.pcap') pkt0 =pkts[0] headers=['dst','src','type','version','tc','f1','plen','nh','hlim','IPsrc','IPdst','sport','dport','seq','ack', 'dataofs','reserved','flags','window','chksum','urgptr','optionsmss','optionsNOP0','optionsWScale', 'optionsNOP1','optionsNOP2','optionsSAckOK'] a1=pkt0['Ethernet'].dst a2=pkt0['Ethernet'].src a3=pkt0['Ethernet'].type b1=pkt0['IPv6'].version b2=pkt0['IPv6'].tc b3=pkt0['IPv6'].fl b4=pkt0['IPv6'].plen b5=pkt0['IPv6'].nh b6=pkt0['IPv6'].hlim b7=pkt0['IPv6'].src b8=pkt0['IPv6'].dst c1=pkt0['TCP'].sport c2=pkt0['TCP'].dport c3=pkt0['TCP'].seq c4=pkt0['TCP'].ack c5=pkt0['TCP'].dataofs c6=pkt0['TCP'].reserved c7=pkt0['TCP'].flags c8=pkt0['TCP'].window c9=pkt0['TCP'].chksum c10=pkt0['TCP'].urgptr c11=pkt0['TCP'].options[0][1] c12=pkt0['TCP'].options[1][1] c13=pkt0['TCP'].options[2][1] c14=pkt0['TCP'].options[3][1] c15=pkt0['TCP'].options[4][1] c16=pkt0['TCP'].options[5][1] rows=[a1,a2,a3,b1,b2,b3,b4,b5,b6,b7,b8,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16] with open('test3.csv','w',newline ='') as f: fcsv= csv.writer(f) fcsv.writerow(headers) fcsv.writerow(rows)