ビーコンフレームを解析するPythonスクリプトを理解しようとしています。しかし私は.payloadと呼ばれるものに詰まっています。 Pythonのドキュメンテーションを見て、研究をしても私を助けませんでした。ペイロードがフレームによって運ばれるデータであることを知りました。Python:scapyで正確に.payloadは何ですか?
def insert_ap(pkt):
## Done in the lfilter param
# if Dot11Beacon not in pkt and Dot11ProbeResp not in pkt:
# return
bssid = pkt[Dot11].addr3
if bssid in aps:
return
p = pkt[Dot11Elt]
cap = pkt.sprintf("{Dot11Beacon:%Dot11Beacon.cap%}"
"{Dot11ProbeResp:%Dot11ProbeResp.cap%}").split('+')
ssid, channel = None, None
crypto = set()
while isinstance(p, Dot11Elt):
if p.ID == 0:
ssid = p.info
elif p.ID == 3:
channel = ord(p.info)
elif p.ID == 48:
crypto.add("WPA2")
elif p.ID == 221 and p.info.startswith('\x00P\xf2\x01\x01\x00'):
crypto.add("WPA")
p = p.payload # HERE IT IS
if not crypto:
if 'privacy' in cap:
crypto.add("WEP")
else:
crypto.add("OPN")
print "NEW AP: %r [%s], channed %d, %s" % (ssid, bssid, channel,
'/'.join(crypto))
aps[bssid] = (ssid, channel, crypto)
aps = {}
sniff(iface='mon0', prn=insert_ap, store=False,
lfilter=lambda p: (Dot11Beacon in p or Dot11ProbeResp in p))
ペイロード関数はwhileループで記述されています。パケットがDot11Eltのインスタンスである限り、ループはアクティブです。しかし、何が.payloadはもはやDot11Elt(?)
ありがとう!
私はあなたが作業しているプロトコルについては何も知らないが、その行は 'p'の値を' p.payload'の値に置き換えていることは明らかです。つまり、 'p'の内容に対して何もしていないのです。変数に新しい値を代入しています。 – larsks