from scapy.all import * import re import argparse # 定义函数用于分析数据包中是否包含谷歌搜索相关内容并提取搜索词 def findGoogle(pkt): """ 函数功能: 此函数用于接收一个网络数据包(pkt),并尝试从中提取出与谷歌搜索相关的查询内容。 它首先检查数据包是否包含应用层的原始数据(Raw层),如果包含则获取其负载数据, 接着判断负载数据中是否存在GET请求以及是否包含"google"相关标识,若满足条件则使用正则表达式 提取出搜索参数部分,经过简单处理后将提取到的搜索词打印出来。 参数: pkt:捕获到的网络数据包,由Scapy库捕获并传入该函数进行分析处理。 """ if pkt.haslayer(Raw): # 获取原始负载数据并尝试以utf-8解码,如果解码出现错误则忽略错误继续执行(使用errors='ignore') # 因为网络数据包中的负载数据可能存在各种编码情况,这样做能尽量获取可读内容 payload = pkt.getlayer(Raw).load.decode('utf-8', errors='ignore') if 'GET' in payload: if 'google' in payload: # 尝试用正则表达式提取相关搜索参数部分,'(?i)'表示忽略大小写进行匹配 # 该正则表达式旨在匹配以'&g='开头,以'&'结尾中间的内容,即谷歌搜索相关的查询参数部分 r = re.findall(r'(?i)&g=(.*?)&', payload) if r: search = r[0].split('&')[0] # 对提取到的内容进行处理,替换掉常见的表示查询参数开头(q=)、空格(+和%20)等的格式符号 # 以便得到相对更清晰、直观的搜索词内容 search = search.replace('q=', '').replace('+', '').replace('%20', '') print(f'[+] Searched For: {search}') def main(): """ 主函数功能: 1. 创建命令行参数解析器,用于解析用户在运行程序时传入的参数,这里定义了一个用于指定网络接口的参数。 2. 解析命令行参数,若未指定网络接口参数则打印程序使用帮助信息并退出程序,若指定了则配置Scapy库使用该接口。 3. 尝试启动网络数据包嗅探功能,设置过滤条件为tcp端口80(通常对应HTTP流量), 并指定对每个捕获到的符合条件的数据包调用findGoogle函数进行分析处理, 若在嗅探过程中用户按下Ctrl + C(触发KeyboardInterrupt异常)则正常退出程序。 """ # 创建参数解析器对象,用于处理命令行传入的参数,同时提供了程序功能的简要描述信息 parser = argparse.ArgumentParser(description='Google Sniffer - Listen for Google search queries on specified interface') # 添加一个名为'-i'(短参数格式)或'--interface'(长参数格式)的命令行参数,参数类型为字符串, # 其作用是让用户指定要监听的网络接口 parser.add_argument('-i', '--interface', type=str, help='specify interface to listen on') args = parser.parse_args() if args.interface is None: # 如果用户没有指定网络接口参数,打印出程序的使用帮助信息(显示参数的使用格式等) parser.print_usage() exit(0) else: # 将Scapy库的网络接口配置(conf.iface)设置为用户指定的网络接口, # 这样后续的数据包嗅探操作就会在该接口上进行 conf.iface = args.interface try: print('[*] Starting Google Sniffer.') # 使用Scapy库的sniff函数开始嗅探网络数据包,设置过滤条件为'tcp port 80', # 意味着只捕获TCP协议且目标端口为80的数据包(一般HTTP流量使用该端口), # 对于每个捕获到的符合条件的数据包,都会调用findGoogle函数进行分析处理 sniff(filter='tcp port 80', prn=findGoogle) except KeyboardInterrupt: exit(0) if __name__ == '__main__': main()
灵犀网钩・谷歌觅搜
最新推荐文章于 2025-05-22 16:41:47 发布