如何使用 pyshark 从远程计算机上的本地托管网站获取数据包
How Do I get Packets from Locally hosted website on remote computer with pyshark
我正在尝试使用 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
等
您可以使用设置交集
>>> 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]
>>>
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)))
你需要的是从每个子列表生成一个 set
并计算它们的 交集(该集合仅包括每个集合中存在的元素):
intersect = set(my_list[0]) & set(my_list[1]) & set(my_list[2])
在打印结果之前,我们首先将其转换回 list
:
print( list(intersect) )
我的示例是根据您的特定列表量身定制的,使用了交集运算符 &
。我的下一步将是对带有循环的一般情况(N 个子列表)的解释,但它已被其他答案完全涵盖并且它是多余的。
您可以使用集合
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]
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)))
你可以为此使用集合
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])
我正在尝试使用 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
等
您可以使用设置交集
>>> 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]
>>>
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)))
你需要的是从每个子列表生成一个 set
并计算它们的 交集(该集合仅包括每个集合中存在的元素):
intersect = set(my_list[0]) & set(my_list[1]) & set(my_list[2])
在打印结果之前,我们首先将其转换回 list
:
print( list(intersect) )
我的示例是根据您的特定列表量身定制的,使用了交集运算符 &
。我的下一步将是对带有循环的一般情况(N 个子列表)的解释,但它已被其他答案完全涵盖并且它是多余的。
您可以使用集合
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]
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)))
你可以为此使用集合
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])