文档章节

Netflow v9示例

a
 alex_wei
发布于 2013/08/05 13:00
字数 380
阅读 126
收藏 0

因工作需要对Netflow v9协议进行了一些分析,其灵活的模板机制令人印象深刻。本着无代码无真相的原则,使用libpcap库做了一个简单的demo示例,其中对Netflow v9中需要获取的信息做了如下定义:

typedef struct _netflow_v9_record {
	u_int8_t ip_ver;
	union {
		u_int32_t v4_srcaddr;
		struct in6_addr v6_srcaddr;
	} srcaddr;
	union {
		u_int32_t v4_dstaddr;
		struct in6_addr v6_dstaddr;
	} dstaddr;
	union {
		u_int32_t v4_nexthop;
		struct in6_addr v6_nexthop;
	} nexthop;
	u_int32_t orig_pkts;
	u_int32_t orig_bytes;
	u_int32_t reply_pkts;
	u_int32_t reply_bytes;
	u_int32_t first;
	u_int32_t last;
	u_int16_t srcport;
	u_int16_t dstport;
	u_int16_t icmp_type;
	u_int16_t src_vlan;
	u_int16_t dst_vlan;
	u_int8_t src_mac[6];
	u_int8_t dst_mac[6];
	u_int8_t prot;
	u_int8_t tos;
} __attribute__((__packed__)) netflow_v9_record;
仿netfilter-conntrack中tuple机制,做链接管理结构如下(未单独提取tuple):
struct link_info_t {
	struct hlist_node link;
	netflow_v9_record record;
	/* there will be something else */
};
static struct link_info_t tmp_link;

static struct hlist_head link_table[TABLE_SIZE];

static inline uint16_t hash_ip_port(struct link_info_t link)
{
	return ((link.record.dstaddr.v4_dstaddr ^ link.record.srcaddr.v4_srcaddr) ^ \
		(link.record.dstport ^ link.record.srcport)) & 0x1ffff;
}
因为没有单独将tuple提取出来,且将ORIGINAL与REPLY做为同一个tuple以标示同一条连接,所以对连接的判断和统计繁琐了一些:
hlist_for_each_entry(cur_link, pos, head, link) {
			if (cur_link->record.srcaddr.v4_srcaddr == tmp_link.record.srcaddr.v4_srcaddr && \
			    cur_link->record.dstaddr.v4_dstaddr == tmp_link.record.dstaddr.v4_dstaddr && \
			    cur_link->record.srcport == tmp_link.record.srcport && \
			    cur_link->record.dstport == tmp_link.record.dstport) {
				cur_link->record.orig_pkts++;
				cur_link->record.orig_bytes += len;
				flag = 1;
				break;
			} else if (cur_link->record.srcaddr.v4_srcaddr == tmp_link.record.dstaddr.v4_dstaddr && \
			    cur_link->record.dstaddr.v4_dstaddr == tmp_link.record.srcaddr.v4_srcaddr && \
			    cur_link->record.srcport == tmp_link.record.dstport && \
			    cur_link->record.dstport == tmp_link.record.srcport) {
				cur_link->record.reply_pkts++;
				cur_link->record.reply_bytes += len;
				flag = 1;
				break;
			}
		}
gen_nfv9模块负责构造、发送数据包,作为示例,仅手工构造了包含两个字段信息的template与数据信息,由lo:9999发送。

(不能添加附件??...:-(...)




© 著作权归作者所有

共有 人打赏支持
a
粉丝 2
博文 6
码字总数 2777
作品 0
海淀
程序员
私信 提问
NFDUMP

netflow的紀錄工具, 可收集netflow資料及紀錄相關過程等, 支援netflow第五及第七版 nfdump is a set of tools to collect and process netflow data. It's fast and has a powerful filter ......

匿名
2009/08/10
2.6K
0
网络监视工具--pmacct

pmacct是一个被动的网络监视工具,用来衡量,帐户,分类,汇总,和导出的IPv4和IPv6流量。可插入的架构使数据收集非常灵活,存储到内存中的表或SQL(MySQL和SQLite的,PostgreSQL)的数据库和...

匿名
2009/12/22
2.7K
0
pmacct 1.5.0 RC2 发布,网络监视工具

pmacct 1.5.0 RC2 发布,pmacct是一个被动的网络监视工具,用来衡量,帐户,分类,汇总,和导出的IPv4和IPv6流量。可插入的架构使数据收集非常灵活,存储到内存中的表或SQL(MySQL和SQLite的...

oschina
2014/04/18
760
0
pmacct 更新为 0.14.1,网络监视工具

pmacct是一个被动的网络监视工具,用来衡量,帐户,分类,汇总,和导出的IPv4和IPv6流量。可插入的架构使数据收集非常灵活,存储到内存中的 表或SQL(MySQL和SQLite的,PostgreSQL)的数据库...

阿笨哥
2012/10/17
792
3
Logstash 6.5.0 发布,开源服务端数据处理流程

Logstash 6.5.0 已发布,Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到你最喜欢的“存储库”中。 更新内容: BUGFIX: Count unused spa...

淡漠悠然
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

在Flutter中嵌入Native组件的解决方案

摘要: 引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择。本文希望向大家介绍AndroidView的使用方式以及在此...

阿里云官方博客
40分钟前
1
0
aws S3 util demo

package com.example.demo;import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.auth.BasicAWSCredentials;import co......

经常把天聊死的胖子
59分钟前
4
0
linux下查看cpu、memo、io、swap性能数据脚本

直接贴脚本: 1、cpu #!/bin/bashCurrentDate=`date -d today '+%Y%m%d'`CurrentTime=`date -d today '+%Y%m%d%H%M'`mytext="$CurrentTime\t`top -b -n 1 | grep Cpu\(s\......

郑加威
今天
5
0
MySQL之——查询重复记录、删除重复记录方法大全

MySQL之——查询重复记录、删除重复记录方法大全

安小乐
今天
2
0
spring容器启动,停止,关闭事件监听-ApplicationEvent

ApplicationEvent ApplicationEvent相当于一个事件,所有自定义事件都需要继承这个抽象类。在Eclipse中Ctrl+Shift+H调用类的层次结构列表,可以看到如下 Application下抽象子类ApplicationCo...

tantexian
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部