我正在尝试使用pyshark从远程托管在本地计算机上的网站获取数据包(测试目的)。
这是我的代码:
import pyshark
def print_live_dns():
capture = pyshark.LiveCapture("wlan0")
for packet in capture:
# print(packet)
with open('packets.txt', 'a') as f:
f.write(str(packet))
if "DNS" in packet and not packet.dns.flags_response.int_value:
print(packet.dns.qry_name)
if __name__ == "__main__":
print_live_dns()
使用此代码,我只能从互联网获取数据包。这不是我所需要的。我该如何实现?使用pyshark, scapy, nmap
等
答案 0 :(得分:6)
您可以使用设置交集
>>> from functools import reduce
>>>
>>> my_list = [[2,3,5,6,7,8,9], [2,4,78,23,13,7], [3,2,5,98,23,1,34]]
>>> list(reduce(lambda x, y: set(x).intersection(set(y)), my_list))
[2]
>>>
答案 1 :(得分:1)
from functools import reduce
my_list = [[2,3,5,6,7,8,9], [2,4,78,23,13,56,7], [3,2,5,98,23,1,34]]
print(reduce(set.intersection, map(set, my_list)))
答案 2 :(得分:0)
您需要从每个子列表中生成一个set
并计算其交点(该集合仅包括每个集合中存在的元素):
intersect = set(my_list[0]) & set(my_list[1]) & set(my_list[2])
在打印结果之前,我们首先将其转换回list
:
print( list(intersect) )
我的示例是针对您的特定列表量身定制的,使用了交集运算符&
。我的下一步将是对带有循环的一般情况(N个子列表)进行解释,但其他答案已完全涵盖了该情况,这将是多余的。
答案 3 :(得分:0)
您可以使用集
my_list = [[2,3,5,6,7,8,9], [2,4,78,23,13,56,7], [3,2,5,98,23,1,34]]
res = set(my_list[0])
for i in range(1, len(my_list)):
res = res.intersection(set(my_list[i]))
print(list(res))
输出
[2]
答案 4 :(得分:0)
from functools import reduce
my_list = [[2,3,5,56,7,8,9], [2,4,78,23,13,56,7], [3,2,5,98,23,1,34]]
# use the first list converted to a set as result, use *rest for iteration
result, *rest = map(set, my_list)
for sub in rest:
result = result.intersection(sub)
print(result)
另一种实现方法是将&
操作应用于转换后的集合:
import operator
list(reduce(operator.and_, map(set, l)))
答案 5 :(得分:0)
您可以为此使用集
my_list = [[2,3,5,6,7,8,9], [2,4,78,23,13,56,7], [3,2,5,98,23,1,34]]
first_tuple_list = [set(lst) for lst in my_list]
print(first_tuple_list[0] & first_tuple_list[1] & first_tuple_list[2])