文档章节

Netflow v9示例

a
 alex_wei
发布于 2013/08/05 13:00
字数 380
阅读 123
收藏 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
ntop 4.0 发布,Linux网络监控工具

跟 top 监视系统活动状况相似,ntop 是一个用来实时监视网络使用情况的工具。由于 ntop 具有 Web 界面模式,因此无论是配置还是使用都很容易在短时间之内快速上手。 该版本部分重写了ntop的处...

红薯
2010/07/20
944
0

没有更多内容

加载失败,请刷新页面

加载更多

驰狼课堂

http://www.chilangedu.com/

求是科技
11分钟前
0
0
jumpserver 报错"Incorrect string value

申明 本文所有内容参考自jumpserver记录命令无法入库问题 #1773 简介 jumpserver 1.4.0在jumpserver.log中大量报错,错误日志 File "/opt/jumpserver/apps/terminal/api.py", line 246, i...

zhnxin
17分钟前
1
0
用户管理相关配置文件及命令

9月19日任务 2.27linux和windows互传文件 3.1 用户配置文件和密码配置文件 3.2 用户组管理 3.3 用户管理 扩展知识 实用小工具 简单命令行下实现Linux/Windows文件互传 前提:使用远程工具Xsh...

robertt15
36分钟前
0
0
presto 架构

presto 介绍 是Facebook开源的,完全基于内存的并⾏计算,分布式SQL交互式查询引擎 是一种Massively parallel processing (MPP)架构,多个节点管道式执⾏ ⽀持任意数据源(通过扩展式Connect...

张欢19933
36分钟前
0
0
Ajax技术应用

1. 相关概述 1. ajax:即异步js与xml,可以实现客户端与服务端之间数据的异步交互。对于普通的B/S 模式是采用的同步方式,即一次请求必须等待一次服务器响应完成,而异步则是客户端发送请求后...

江左煤郎
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部