gpt4 book ai didi

python - python中卡住的框架验证条件

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:35 26 4
gpt4 key购买 nike

我认为大多数Python用户都可以回答这个问题,并且在知识方面相当普遍,但对我来说我无法弄清楚。

这是代码:

            if ssid in net and p.addr2 not in clients:
count +=1
get_oui(p.addr2)
net.append(ssid)
checkmac(p.addr2)
mps+=1
print str(count)+'>',p.addr2+' ('+G+macf+W+') <--Probing--> '+O+ssid+W+' < '+Y+'MPS'+W
if args.log:
wr_log(p.addr2,ssid,macf)

elif ssid not in net and p.addr2 in clients:
count +=1
net.append(ssid)
get_oui(p.addr2)
clients.append(p.addr2)
mpm+=1
print str(count)+'>',p.addr2+' ('+G+macf+W+') <--Probing--> '+O+ssid+W+' < '+Y+'MPM'+W
if args.log:
wr_log(p.addr2,ssid,macf)
elif ssid not in net and p.addr2 not in clients:
count +=1
net.append(ssid)
get_oui(p.addr2)
checkmac(p.addr2)
print str(count)+'>',p.addr2+' ('+G+macf+W+') <--Probing--> '+O+ssid+W
if args.log:
wr_log(p.addr2,ssid,macf)

现在这是你们需要知道的:这个脚本正在监视和分析来自空中的无线数据包,我从每个数据包中提取 ssid、mac 地址和制造商数据。客户端很容易发送大量具有相同数据的重复数据包,其中包含具有独特数据的独特数据包。

当前 SSID 存储在 ssid 中​​,当前 MAC 存储在 p.addr2 中。以前的 ssid 和 p.addr2 值分别存储在列表中 - 'net' 和 'clients'。

对于大多数数据包,我的代码都可以保存并且有效,但对于一种特殊情况,我丢失了。考虑 ssid 和 mac 地址的这些假设值:

SSID  MAC
S1 A
S2 A
S1 B
S2 B

对于第一种情况,第三个条件成立对于第二种情况,第二个条件成立对于第三种情况,第一个条件成立对于第四个条件,没有一个条件成立,对吗?因为当使用“not in”和“in”操作数检查列表时,它会发现客户端和 ssid 都已存在,因此会丢弃数据包,而这是一个有效条件,意味着基本上有 2 个客户端正在寻找相同的数据包相同的 ssid,我希望将其打印出来。但如果我这样做:

elif ssid in net and p.addr2 in clients:
get_oui(p.addr2)
checkmac(p.addr2)
print str(count)+'>',p.addr2+' ('+G+macf+W+') <--Probing--> '+O+ssid+W

重复的数据包开始打印出来,因为每个客户端发送多个具有相同数据的数据包,而这种情况可能会出现。如何实现一个条件,以便我可以验证 client[] 中的多个客户端正在 net[] 中查找多个 ssid 的情况???

根据cmidi的建议:我尝试使用字典并尝试以这种方式访问​​它,它仍然给我重复项!

            if count > 0:
for k,v in obs.items():
if k and v != p.addr2 and ssid:
count +=1
get_oui(p.addr2)
net.append(ssid)
checkmac(p.addr2)
obs[p.addr2] = ssid
mps+=1
print str(count)+'>',p.addr2+' ('+G+macf+W+') <--Probing--> '+O+ssid+W+' < '+Y+'MPS'+W
if args.log:
wr_log(p.addr2,ssid,macf)
else:
count +=1
get_oui(p.addr2)
net.append(ssid)
checkmac(p.addr2)
obs[p.addr2] = ssid
print str(count)+'>',p.addr2+' ('+G+macf+W+') <--Probing--> '+O+ssid+W+' < '+Y+'MPS'+W
if args.log:
wr_log(p.addr2,ssid,macf)

这是怎么回事?

@lmz 好的,根据要求,这就是一切的工作方式,或者更确切地说应该工作:

对于我扫描的每个数据包,我都会获取我的 SSID、MAC 和制造商值。我想将这些数据(仅 SSID 和 MAC)保存在一起,因为作为一对,在丢弃其他重复数据包后它们将是唯一的。对于第一个数据包,我在不进行任何检查的情况下打印值,并且我们有了第一组值,然后从第二个数据包开始,重复检查和某些条件变为事件状态。理想情况下,为了尽可能减少代码,这里应该直接检查自列表中第一个数据包以来捕获的 SSID:MAC 对、dict、ordereddict 等。这里不仅仅是排序,它们的代码还需要能够扫描遍历所有先前的对,删除列表中与传入 SSID:MAC 不匹配的字典对。如果未找到重复项,则新的 SSID:MAC 对将添加到列表、字典等中。否则,如果发现重复项,则循环将中断,我们将移至第三个数据包,依此类推。

最佳答案

我给出了一个带有字典的示例,以便您也可以存储关联的数据。如果您想要顺序,只需将 dict 更改为 collections.OrderedDict 即可,如图所示。既然你说它是重复的,并且唯一的,我假设 MPM 和 MPS 位是无用的。如果您需要它们,请告诉我。

示例(假设您有字符串 SSID 和 MAC):

from collections import OrderedDict
packets = [
('S1', 'A'), ('S2', 'A'), ('S1', 'B'),
('S2', 'B'), ('S1', 'A'), ('S1', 'B')
]



# seen_packets = OrderedDict() # if order is required
seen_packets = dict()

for ssid, mac in packets:
print "Considering SSID ", ssid, " and MAC ", mac
ssid_mac = (ssid, mac)
if ssid_mac in seen_packets:
print "Seen this before - not adding"
else:
data_for_packet = True # your own data here (timestamp?)
print "Never seen this SSID/MAC combo before"
seen_packets[ssid_mac] = data_for_packet

print "Unique ssid,mac pairs with data:"
for (ssid, mac), data in seen_packets.iteritems():
print ssid, mac, data

关键是要理解元组 (ssid, mac)perfectly valid key对于字典,如果 ssidmac 都是字符串,因此不需要多个列表。

关于python - python中卡住的框架验证条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30134557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com