비콘 프레임을 분석하는 Python 스크립트를 이해하려고합니다. 하지만 나는 페이로드라고 불리는 곳에 붙어 있습니다. 파이썬 문서를보고 연구를하는 것은 나를 도와주지 못했다. 페이로드가 프레임에 의해 운반되는 데이터라는 것을 알았습니다.파이썬 : 정확히 .payload in scapy?
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