5250 2024-08-07 10:17 采纳率: 0%
浏览 15
已结题

python如何过滤应用层协议

用tshark抓取到的数据 怎么根据应用层协议进行过滤?
我的命令是tshark -i ens33 -s 65535 -w -

我现在需要对ftp和rtp协议的数据进行过滤 不捕获这两个协议的数据。tshark有一个参数-Y 可以根据这个过滤 但是-Y 和0-w不能同时用。
-2 -R参数又提示我的命令是single-pass 用不了

该怎么办呢?参数这里有方法过滤吗?
或者在抓取到数据后 根据什么对数据进行分析可以提取并过滤掉这两个协议的数据呢?

我现在有一个tcpdump分析数据的方法 我使用可以基于提取出来的包中的信息 来识别出应用层协议?如果可以的话 用什么方法?

def producer(q):
    try:
        tcpdump_process = subprocess.Popen(
            ["tcpdump", "-i", str(wangkaname), "-U", "-s", "65535", "-w", "-"],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        try:
            pcap_header = tcpdump_process.stdout.read(24)
            if pcap_header[:4] == b"\xa1\xb2\xc3\xd4":  # big-endian
                typeI = "!I"
                typeH = "!H"
            elif pcap_header[:4] == b"\xd4\xc3\xb2\xa1":  # little-endian
                typeI = "I"
                typeH = "H"
            else:
                raise ValueError("Unknown pcap file format")
            reader = PacketReader("../dataset/realdiswangka.csv")

            while True:
                try:
                    packet_header = tcpdump_process.stdout.read(16)
                    if not packet_header:
                        if tcpdump_process.poll() is not None:
                            break
                        continue
                    timeHigh = struct.unpack(typeI, packet_header[0:4])[0]
                    timeLow = struct.unpack(typeI, packet_header[4:8])[0]
                    timeStamp = 1000000 * timeHigh + timeLow
                    ts_sec, ts_usec, incl_len, orig_len = struct.unpack(
                        typeI + typeI + typeI + typeI, packet_header
                    )
                 **  ** packet_data = tcpdump_process.stdout.read(incl_len)__**__**     //我现在有一个tcpdump分析数据的方法  我使用可以基于提取出来的包中的信息 来识别出应用层协议?如果可以的话  用什么方法?
                    basicPacket = reader.get_ipv4_info(packet_data, timeStamp)
                    if basicPacket:
                        q.put(basicPacket)
                except Exception as e:
                    print(f"发生了未知的错误: {e}")
        except Exception as e:
            print(f"发生了未知的错误: {e}")
        finally:
            tcpdump_process.terminate()
            tcpdump_process.wait()
    except Exception as e:
        print(f"发生了未知的错误: {e}")

  • 写回答

21条回答 默认 最新

  • 专家-司宇[在线] 2024-08-07 10:34
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-司宇整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    要解决这个问题,我们可以分两步走:首先使用tshark命令抓取所有网络数据,然后在Python中处理抓取到的数据,过滤掉FTP和RTP协议的数据。下面是如何实现这两步的详细步骤:

    第一步:使用tshark抓取数据

    由于-Y-w -(表示将输出重定向到标准输出,通常用于管道操作)不能同时使用,并且你也提到-R/-2参数在你的场景中不适用,我们先不进行协议过滤,直接抓取所有流量到一个文件或内存中,之后再用Python处理。

    命令如下:

    tshark -i ens33 -s 65535 -w captured_traffic.pcapng
    

    这会将网络流量保存到名为captured_traffic.pcapng的文件中。

    第二步:Python中过滤数据

    接下来,使用Python的pyshark库来读取捕获的pcap文件,并过滤掉FTP和RTP协议的数据。如果你还没有安装pyshark,可以通过pip安装:

    pip install pyshark
    

    然后编写Python脚本过滤数据:

    from pyshark import FileCapture
    
    # 定义要排除的协议列表
    exclude_protocols = ['ftp', 'rtp']
    
    def is_excluded(packet):
        """判断是否为需要排除的协议"""
        return any(protocol in packet for protocol in exclude_protocols)
    
    # 打开捕获文件
    capture_file = 'captured_traffic.pcapng'
    capture = FileCapture(capture_file, display_filter="tcp or udp") # 只分析TCP和UDP,因为FTP和RTP通常基于TCP/UDP
    
    # 过滤并打印非排除的协议数据包
    for packet in capture:
        if not is_excluded(packet.highest_layer.lower()):
            print(packet)
    
    capture.close()
    

    这段代码首先定义了一个要排除的协议列表,然后通过遍历每个捕获的包,检查其最高层协议(highest_layer)是否在排除列表中。如果不在,则打印该包的信息。这里使用了tcp or udp作为display_filter,因为FTP主要基于TCP,而RTP可以基于UDP或TCP,这样能更针对性地处理这两种协议。

    请注意,这个方法可能会比较消耗资源,特别是对于大量数据包的处理。确保你的系统资源足够处理这些数据。此外,根据你的具体需求,可能还需要进一步细化过滤逻辑,比如通过端口号或其他特定字段进行过滤。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月14日
  • 修改了问题 8月7日
  • 修改了问题 8月7日
  • 赞助了问题酬金15元 8月7日
  • 展开全部

悬赏问题

  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译