J'ai essayé de capturer des paquets WIFI avec Linux et de voir la fréquence/le canal auquel le paquet a été capturé. J'ai essayé Wireshark et il n'y avait pas de chance et non aide . Bien que j'utilise un échantillons de paquets de Wireshark, je peux voir la fréquence/le canal.
Alors maintenant, j'expérimente avec Scapy. Je voulais comprendre la fréquence/le canal d'un paquet reniflé, mais toujours pas de chance. Y a-t-il un moyen de faire cela avec Scapy.
P.S. S'il existe un meilleur outil que Scapy, ou Python, j'apprécie les commentaires
Cette réponse concerne le titre et le contenu de la question: Fournir des getters et des setters pour la fréquence et le canal d'un paquet.
Pour cette solution, utilisez le fichier wpa-Induction.pcap dans Sample Captures de Wireshark.
Il est utile de fouiller dans un paquet pour voir à quels champs Scapy a accès dans l'interpréteur Scapy.
>>> pkts = rdpcap('wpa-Induction.pcap')
>>> pkts[0].summary()
"RadioTap / Dot11FCS / Dot11Beacon / Dot11Elt / Dot11EltRates / Dot11Elt / Dot11Elt / Dot11Elt / Dot11Elt / Dot11EltRSN / Dot11Elt / Dot11EltVendorSpecific / Dot11EltMicrosoftWPA / SSID=''"
>>> pkts[0].show()
###[ RadioTap dummy ]###
version= 0
pad= 0
len= 24
present= Flags+Rate+Channel+Lock_Quality+Antenna+dB_AntSignal+RXFlags
Flags= FCS
Rate= 2
Channel= 2412
ChannelFlags= CCK+2GHz
Antenna= 84
notdecoded= '\x00\x00+\x00\x00\x9fa\xc9\\'
... <output truncated> ...
Alors que 2412 est une fréquence et PAS un canal , ce sont les données que nous voulons. RadioTap est la couche par pkts[0].summary()
. Mettre ensemble,
>>> frequency = pkts[0][RadioTap].Channel
>>> print(frequency)
2412
Scapy ne fournit pas d'accès au canal, mais il est trivial de convertir la fréquence en canal.
Étant donné un fichier et un numéro de paquet, nous pouvons maintenant obtenir le canal et la fréquence d'un paquet.
from scapy.all import RadioTap, rdpcap
def getChannel(frequency):
base = 2407 # 2.4Ghz
if frequency//1000 == 5:
base = 5000 # 5Ghz
# 2.4 and 5Ghz channels increment by 5
return (frequency-base)//5
def getFrequency(file, packet_number):
pkts = rdpcap(file)
# Scapy mixes up Channel/Frequency here
frequency = pkts[packet_number][RadioTap].Channel
return frequency
freq = getFrequency('wpa-Induction.pcap', 0)
chan = getChannel(freq)
print("Channel: {0} \nFrequency: {1}".format(freq, chan))
Disons que nous voulions changer la fréquence à 5300 et la sauvegarder. Cela nécessiterait seulement une itération sur la liste des paquets, changer la fréquence pour chaque paquet et enregistrer le résultat. Dans l'interpréteur scapy:
>>> for i in range(len(pkts)):
... pkts[i][RadioTap].Channel = 5300
>>> wrpcap('temp.pcap', pkts)
>>> pkts2 = rdpcap('temp.pcap')
>>> pkts[0].Channel
5300