[〜#〜]目的[〜#〜]
ScapyでキャプチャしたビーコンフレームのDot11Eltレイヤーを繰り返し処理します。各ID
レイヤーの_.info
_もデコードしたいと思います。
_def packet_handler(packet) :
if packet.haslayer(Dot11) :
if packet.subtype == 8 :
for i in packet.getlayer(Dot11Elt) :
print i.info
def main() :
sniff(count = 50, prn = packet_handler)
if __name__ == "__main__" :
main()
_
[〜#〜]結果[〜#〜]
これは、SSID
である_ID = 0
_の情報のみを提供しています
レイヤーを繰り返し処理して_ID = 1
_、_ID = 3
_などに到達できるようにしたいと思います。
また、印刷時にこのタイプのエンコーディングがどのようなものになるかわかりません
packet.getlayer(Dot11Elt)
packet(Dot11Elt)
https://stackoverflow.com/a/29989032 の情報を前提として、次のように反復する必要があります。
dot11elt = packet.getlayer(Dot11Elt)
while dot11elt:
print dot11elt.ID, dot11elt.info
dot11elt = dot11elt.payload.getlayer(Dot11Elt)
ここでバディに行きます。あなたはあなたが欲しいものを何でも持つことができます
from netaddr.core import NotRegisteredError
from netaddr import *
from scapy.all import *
import logging
import logging.handlers
PROBE_REQUEST_TYPE=0
PROBE_REQUEST_SUBTYPE=4
WHITELIST = ['18:dc:56:f0:40:40','34:a3:95:b1:2b:d9','48:13:7e:57:ae:b6','98:0c:a5:17:7d:2d']
my_logger = logging.getLogger('agentlogger')
handler = logging.handlers.RotatingFileHandler('tplink3022.log', mode='a', maxBytes=1048576, backupCount=10, encoding=None, delay=0)
my_logger.addHandler(handler)
def PacketHandler(pkt):
if pkt.haslayer(Dot11):
if pkt.type==PROBE_REQUEST_TYPE and pkt.subtype == PROBE_REQUEST_SUBTYPE:
PrintPacket(pkt)
def mac_info(mac):
global macf
maco = EUI(mac)
try:
macf = maco.oui.registration().org
except NotRegisteredError:
macf = "Not available"
return macf
def PrintPacket(pkt):
print "Probe Request Captured:"
try:
extra = pkt.notdecoded
except:
extra = None
if extra!=None:
signal_strength = -(256-ord(extra[-4:-3]))
else:
signal_strength = -100
print "No signal strength found"
mac_info(pkt.addr2)
print "Time: %s Source: %s SSID: %s MANF: %s RSSi: %d"%(pkt.time,pkt.addr2,pkt.getlayer(Dot11ProbeReq).info,macf,signal_strength)
str = "%s,%s,%s,%s,%d\n"%(pkt.time,pkt.addr2,pkt.getlayer(Dot11ProbeReq).info,macf,signal_strength)
WriteToFile(str)
def WriteToFile(str):
my_logger.warn(str)
def main():
from datetime import datetime
print "[%s] Starting scan"%datetime.now()
print "Scanning :"
try:
sniff(iface=sys.argv[1],prn=PacketHandler,count=0,store=0)
except:
print'[!] Eroor : Failed to initialize sniffing'
if __name__=="__main__":
main()`