python - 用 scapy 和正则表达式嗅探网络流量?
问题描述
我第一眼看到了 python 的 scapy 包,想测试我的第一个小脚本。为了测试下面的代码,我给自己发了一封电子邮件,其中包含这个字符串“10000000000000”。我的期望是,以下最小示例(我的网卡处于监视模式并以 su 执行)会专门为该电子邮件提供命令行输出,但事实并非如此。我确信这是由于我自己对网络流量和 tcp 的误解造成的——有人能解释一下吗?
我设置的虚拟环境是 Python 3.6.8
(我已经测试过,我可以使用注释掉的行来嗅探网络流量,只有当我尝试通过正则表达式过滤它们的内容时,结果才不像我预期的那样。)
import optparse
import scapy.all as sca
import re
from scapy import packet
from scapy.layers.dns import DNS
from scapy.layers.dot11 import Dot11Beacon, Dot11ProbeReq
from scapy.layers.inet import TCP
class SniffDataTraffic:
@staticmethod
def find_expr(pack: packet) -> str:
regex_dict = {'foo': r"1[0-9]{13}",'bar': r"2[1-5]{14}"}
raw_pack = pack.sprintf('%Raw.load%')
found = {iter: re.findall(regex_dict[iter], raw_pack) for iter in regex_dict.keys()}
for name, value in found.items():
if value:
return "[+] found {}: {}".format(name, value[0])
def main():
try:
print("[*] Starting sniffer")
#sca.sniff(iface="xxxxxmon", prn=lambda x: x.summary(), store=False)
sca.sniff(prn=SniffDataTraffic.find_expr, filter='tcp', iface="xxxxxmon", store=False)
except KeyboardInterrupt:
exit(0)
if __name__ == '__main__':
main()
解决方案
推荐阅读
- c# - System.Drawing.Bitmap C# 中的通道数
- java - Java 泛化方法来验证对象参数中的空值
- c# - 是什么原因支持“ApplicationDbContext”上下文的模型自创建数据库以来发生了变化
- python - 使用 python 在 AWS 上创建存储桶错误
- bash - 如何使用 shell 脚本将行转换为列或一些漂亮的表
- python-3.x - 如何将模拟对象传递给 pytest 夹具
- google-analytics - 删除没有 ClientID - 用户删除 API Google Analytics
- android - Android 数据绑定 DatabindingUtil 与绑定类
- php - 分页,搜索和排序在使用ajax的codeigniter中的jquery数据表中不起作用
- c++ - 如何隐藏或禁用 WIX 安装程序中的取消按钮?