前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开源 | 分布式数据包回溯工具

开源 | 分布式数据包回溯工具

作者头像
携程技术
发布2018-02-06 16:41:18
1.6K0
发布2018-02-06 16:41:18
举报
文章被收录于专栏:携程技术携程技术

在复杂的网络环境中,技术人员会面临各种问题或故障需研究并解决,比如可能有系统或应用参数配置不当,也可能恶意软件感染等,都可能对正常应用造成影响。对数据包进行协议分析,能够详细的了解网络上正在或过去到底发生什么,是遇到疑难杂症时候最常用和最有效的方法。当需要对于历史网络事件进行追溯时,就要有可以在网络上捕获、存储原始数据包,后期能快速检索到所需历史数据包的工具。

我们研究了一种可以满足数据包捕获、存储以及快速查找的方法。它是利用HBASE来存储捕获到的原始数据包,并且它能够根据时间戳、IP、端口等信息快速的获取到指定的历史数据包。

技术分析

通常的做法是将网络流量通过交换机旁路镜像的方式送到服务器,然后服务器使用TCPDUMP的方式进行抓包,后续过滤也是通过tcpdump进行过滤查找。但是由于网络环境的一些原因,流量非常的大,镜像点非常多的时候,会出现一些问题:

1、流量很大如果TB级别的话,导致tcpdump 文件很大(一分钟可能就要几个G的大小) 。

2、文件过多,文件分散,tcpdump过滤很麻烦(多台服务器、多个文件)。

3、数据无法统一存储,每台抓包服务器都需要很大的硬盘。

针对以上的问题,我们开发了一个基于HBASE的包回溯系统,它能够很好的解决了以上问题。它不仅能集中的对海量原始数据包,还能够快速的从海量的数据包根据时间、ip、端口、协议等信息快速获取原始数据包的pcap文件。已经开源代码,地址详见文章最底部。

系统架构

为了满足海量的数据存储以及快速的数据包回溯所以采用了一个分布式的、面向列的开源数据库HBASE。抓包采用了Libpcap配合PF_RING 以此来提高抓包的性能。并且为了方便的进行数据包的回溯操作,实现了相应的API,API可以通过时间戳、IP、协议、端口信息对历史数据包进行查找、组合返回一个pcap文件给用户。

抓包

数据包的捕获几个步骤:

  1. 原始数据包的获取,为了提高抓包性能,降低数据包丢失率,采用了PF_RING作为底层驱动,并结合libpcap进行数据包抓取;
  2. 数据包的解析和索引的建立,索引是HBASE存储和查找数据的一个重要的部分,索引组成包含IP、协议、端口、IP-ID、分片信息;
  3. 数据包描述头信息,包含单个数据包对应的大小、类型信息,以便获取到原始数据后进行恢复;
  4. 数据包的存储,将建立的索引以及数据包描述头+原始数据发送到HBASE。

HBASE存储

HBase是一个分布式的、面向列的开源数据库,它的一个表可以可以有数十亿行,可以满足海量的数据包存储以及查找。

存储数据模型:

Row Key是Table的主键 行键 Table中记录按照Row Key排序。HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey (或者某个 Rowkey 范围)所在的Region,然后将查询数据的请求路由到该Region获取数据。

HBase的检索支持3种方式:

  1. 通过单个Rowkey访问,即按照某个Rowkey键值进行get操作,这样获取唯一一条记录;
  2. 通过Rowkey的range进行scan,即通过设置startRowKey和endRowKey,在这个范围内进行扫描。这样可以按指定的条件获取一批记录;
  3. 全表扫描,即直接扫描整张表中所有行记录。

HBASE按单个Rowkey检索的效率是很高的,耗时在1毫秒以下,每秒钟可获取1000~2000条记录。所以Row Key的设计对于数据包的查找效率是有直接影响的。为了满足数据包查找的关键因为,所以讲RowKey设计为以下格式:

Srcip-dstip-protocol-srcport-dst-port-ipid-fragmentoffset(均为16进制格式表示)

例如:0a020a5a-0a20038d-6-e07e-50-3b01-0 (表示->)源IP:10.2.10.90,目的IP:10.32.3.141,协议:6(TCP),源端口:57470,目的端口:80,IPID: 15105。

回溯

回溯部分主要包含以下几个方面:

1. 根据需求进行数据检索。数据包可以根据源IP、目的IP、协议、端口组合成RowKey的一个范围进行查找;

示例:

  1. 查找源IP为10.2.10.90的所有数据包: 0a020a5a-0-0-0-0-0-0到0a020a5a-ffffffff-fffff-fffff-fffff-fffff-ffffff.
  2. 查找源IP为10.2.10.90,目的IP为10.32.3.141的所有数据包 0a020a5a-0a20038d-0-0-0-0-0到 0a020a5a-0a20038d-fffff-fffff-fffff-fffff-fffff
  3. 查找源IP:10.2.10.90,目的IP:10.32.3.141,协议:6(TCP),源端口:57470,目的端口:80,IPID: 15105的数据包

直接查找RowKey:0a020a5a-0a20038d-6-e07e-50-3b01-0

2. 将检索的数据还原出每个数据包。在数据包存储的时候保存了数据包的长度等描述信息,所以可以直接的将数据转换为原始数据包;

3. 根据原始数据包的信息将所有数据包进行组合打包,生成pcap格式的文件并返回给用户进行下载。

开源地址:https://github.com/zhuzhibo0/hbasepacket

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 携程技术中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档