用scapy和正则表达式嗅探网络流量?

时间:2019-07-18 21:37:58

标签: python regex tcp python-requests 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()

0 个答案:

没有答案