如何使用pyshark从远程计算机上的本地托管网站获取数据包

时间:2020-06-21 12:11:50

标签: python scapy 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

6 个答案:

答案 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])