有监视网卡数据流的开源软件吗?

hamzsy 2005-11-04 04:19:01
我要监视通过网卡的数据流,并分析,根据数据类型做一定的统计,有这样的相关开源软件吗?
...全文
339 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fisheryj 2005-12-02
  • 打赏
  • 举报
回复
我研究一下 看能不能编译通国
jjduan185 2005-12-02
  • 打赏
  • 举报
回复
呵呵,第二个函数写的比较繁琐,其实原理很简单,就是读proc目录底下的文件,获得跟ifconfig一样的结果,没有注视,不好意思!
jjduan185 2005-12-02
  • 打赏
  • 举报
回复
一个简单的程序,获得网卡列表及每个网卡的流量,大家参考!
#include <stdio.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <net/if.h>
#include <netinet/in.h>
#include <net/if_arp.h>
#include <arpa/inet.h>
#include <unistd.h> //for close()
#define BUFFERSIZE 20
#define MAXINTERFACES 16
struct netCardInfo
{
char Name[BUFFERSIZE];
unsigned int mode;// it is promisc or normal mode
unsigned int status; // up or down
char IP[BUFFERSIZE]; // ip address
char MacAdd[BUFFERSIZE];//mac address
unsigned int BytesRcv;//
unsigned int RytesTrans;//
unsigned int PackRcv;
unsigned int PackTrans;
};
int getNetList(struct netCardInfo a[]);
int getDDX(struct netCardInfo *);
int main(void)
{
int i,j;
while(1){
sleep(3);
struct netCardInfo netcards[MAXINTERFACES];
i = getNetList(netcards);
for(j = 0; j<i;j++)
{
printf("NAME : %s\n",netcards[j].Name);
printf("MODE : %d\n",netcards[j].mode);
printf("STATUS :%d\n",netcards[j].status);
printf("IP : %s\n",netcards[j].IP);
printf("MAC : %s\n",netcards[j].MacAdd);
if(getDDX(&netcards[j])==0)
printf("BYTES RCV %u\nBYTES TRANS %u\nPACKET RECV %u\nPACKET TRANS %u\n",
netcards[j].BytesRcv,netcards[j].RytesTrans,\
netcards[j].PackRcv,netcards[j].PackTrans);
printf("********************************************\n");
}
}
exit(0);
}
int get(struct netCardInfo a[])
{
int fd, intrface,i = 0, num = 0,retn = 0;
struct ifreq buf[MAXINTERFACES];
struct arpreq arp;
struct ifconf ifc;

if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0)
{
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t) buf;
if (!ioctl(fd, SIOCGIFCONF, (char *) &ifc))
{
intrface = ifc.ifc_len / sizeof(struct ifreq);
//printf("interface num is intrface=%d\n\n\n", intrface);
num = intrface;
while (intrface-- > 0)
{
//printf("net device %s\n", buf[intrface].ifr_name);
memset(a[i].Name,0,sizeof(a[i].Name));
sprintf( a[i].Name,"%s",buf[intrface].ifr_name);
/*Jugde whether the net card status is promisc */
if (!(ioctl(fd, SIOCGIFFLAGS, (char *) &buf[intrface])))
{
if (buf[intrface].ifr_flags & IFF_PROMISC)
{
//puts("the interface is PROMISC");
a[i].mode =1;
//retn++;
} else a[i].mode = 0;

}
else
{
//char str[256];

//sprintf(str, "cpm: ioctl device %s",
// buf[intrface].ifr_name);
a[i].mode = 0;
//perror(str);
}

/*Jugde whether the net card status is up */
if (buf[intrface].ifr_flags & IFF_UP)
{
//puts("the interface status is UP");
a[i].status = 1;
}
else
{
//puts("the interface status is DOWN");
a[i].status = 0;
}

/*Get IP of the net card */
if (!(ioctl(fd, SIOCGIFADDR, (char *) &buf[intrface])))
{
//puts("IP address is:");
/*puts(inet_ntoa(((struct sockaddr_in *)
(&buf[intrface].ifr_addr))->sin_addr));
*/
//puts("");
//puts (buf[intrface].ifr_addr.sa_data);
memset(a[i].IP,0,sizeof(a[i].IP));
sprintf(a[i].IP,"%s",inet_ntoa(((struct sockaddr_in *)
(&buf[intrface].ifr_addr))->sin_addr));
}
else
{
/*char str[256];

sprintf(str, "cpm: ioctl device %s",
buf[intrface].ifr_name);

perror(str);*/
memset(a[i].IP,0,sizeof(a[i].IP));
sprintf(a[i].IP,"%s","0.0.0.0");
}


/*Get HW ADDRESS of the net card */
memset(a[i].MacAdd,0,sizeof(a[i].MacAdd));
if (!(ioctl(fd, SIOCGIFHWADDR, (char *) &buf[intrface])))
{ //puts("HW address is:");
sprintf(a[i].MacAdd,"%02x:%02x:%02x:%02x:%02x:%02x",\
(unsigned char) buf[intrface].ifr_hwaddr.sa_data[0],\
(unsigned char) buf[intrface].ifr_hwaddr.sa_data[1],\
(unsigned char) buf[intrface].ifr_hwaddr.sa_data[2],\
(unsigned char) buf[intrface].ifr_hwaddr.sa_data[3],\
(unsigned char) buf[intrface].ifr_hwaddr.sa_data[4],\
(unsigned char) buf[intrface].ifr_hwaddr.sa_data[5]);
}
else
{
/*char str[256];
sprintf(str, "cpm: ioctl device %s",\
buf[intrface].ifr_name);
perror(str);*/
sprintf(a[i].MacAdd,"%s","00:00:00:00:00:00");
}
i++;
}
}
else return -1;
}
else return -1;
close(fd);
return i;
}
int getDDX(struct netCardInfo * netcard)
{
char text[201];
char data[201];
FILE *fp;
char seps[] = " ,\t";
char *token;
int i;
char net[20];
fp = fopen("/proc/net/dev", "r");
if(!fp) return -1;
memset(text,0,201);
while (fgets(text, 200, fp))
{
memset(net,0,20);
strcat(net,netcard->Name);
strcat(net,":\0");
token = strtok( text, seps );
memset(data,0,201);
if(strcmp(token,net)==0)
{
token = strtok( NULL, seps );
if(token == NULL) return -1;
strcat(data,token);
strcat(data," ");
token = strtok( NULL, seps );
if(token == NULL) return -1;
strcat(data,token);
for(i=0;i<6;i++)
{
token = strtok(NULL,seps);
if(token == NULL) return -1;
}
strcat(data," ");
token = strtok( NULL, seps );
if(token == NULL) return -1;
strcat(data,token);
strcat(data," ");
token = strtok( NULL, seps );
if(token == NULL) return -1;
strcat(data,token);
sscanf(data,"%u%u%u%u",&(netcard->BytesRcv),&(netcard->PackRcv),\
&(netcard->RytesTrans),&(netcard->PackTrans));
}
memset(text,0,201);
}
fclose(fp);
return 0;
}
bekars 2005-11-26
  • 打赏
  • 举报
回复
TC是Linux上流量控制的开源项目。
jjduan185 2005-11-26
  • 打赏
  • 举报
回复
sniffer不错,我自己也写了一个流量监视程序(很简单),可以得到每个网卡的流速,不过原理很简单的,想看的话,Email我 duanjigang1983@126.com
zengwh 2005-11-21
  • 打赏
  • 举报
回复
我一直都用ethreal,不过要装wincap,特别是用来分析协议。
hamzsy 2005-11-19
  • 打赏
  • 举报
回复
TC是啥,全称是什么?
bekars 2005-11-09
  • 打赏
  • 举报
回复
可以看看TC,这个是做流量控制的。
hamzsy 2005-11-07
  • 打赏
  • 举报
回复
先谢了,回去了好好看看
IControlWorld 2005-11-07
  • 打赏
  • 举报
回复
tcpdump本身就有这个功能,tcpdump的原代码好找吧
qizihuang 2005-11-06
  • 打赏
  • 举报
回复
iptable就可以实现
dyhml 2005-11-06
  • 打赏
  • 举报
回复
Ethereal 有windows和linux版本 ,是基于libpcap的.

是gpl的.
dataat 2005-11-05
  • 打赏
  • 举报
回复
呵呵,我不知道你说的是否是sniffer软件,这种软件是比较多的。
你可以上网搜索一下,另外,如果相关的软件不是很符合要求的话,我建议你使用libpcap函数库自己来编写相关的抓包工具,很简单的。
祝你好运。
OpenSOC:安全大数据分析框架。OpenSOC已经加入Apache工程改名为Apache Metron。思科在 BroCON 大会上亮相了其安全大数据分析架构 OpenSOC,引起了广泛关注。OpenSOC 是一个针对网络包和流的大数据分析框架,它是大数据分析与安全分析技术的结合, 能够实时的检测网络异常情况并且可以扩展很多节点,它的存储使用开源项目 Hadoop,实时索引使用开源项目 ElasticSearch,在线流分析使用著名的开源项目 Storm。OpenSOC 概念性体系架构如下图所示:OpenSOC 主要功能包括:可扩展的接收器和分析器能够监视任何Telemetry数据源是一个扩展性很强的框架,且支持各种Telemetry数据流支持对Telemetry数据流的异常检测和基于规则实时告警通过预设时间使用Hadoop存储Telemetry的数据流支持使用ElasticSearch实现自动化实时索引Telemetry数据流支持使用Hive利用SQL查询存储在Hadoop中的数据能够兼容ODBC/JDBC和继承已有的分析工具具有丰富的分析应用,且能够集成已有的分析工具支持实时的Telemetry搜索和跨Telemetry的匹配支持自动生成报告、和异常报警支持原数据包的抓取、存储、重组支持数据驱动的安全模型OpenSOC 官方文档介绍了以下五大优点:由思科全力支持,适用于内部多用户免费、开源、基于Apache协议授权基于高可扩展平台(Hadoop、Kafka、Storm)实现基于可扩展的插件式设计具有灵活的部署模式,可在企业内部部署或者云端部署具有集中化的管理流程、人员和数据当前,OpenSOC 运行条件包括:两个网卡(建议使用Napatech的NT20E2-CAP网卡)Apache Flume 1.4.0 版本及以上Apache Kafka 0.8.1 版本及以上Apache Storm 0.9 版本及以上Apache Hadoop 2.x 系列的任意版本Apache Hive 12 版本及以上(建议使用13版本)Apache Hbase 0.94 版本及以上ElasticSearch 1.1 版本及以上MySQL 5.6 版本及以上等。 标签:OpenSOC
计算机网络课程设计 实验报告 "实验内容和要求 " " " "1、实验一 数据包的捕获与分析 " "Wireshark是一种开源的网络数据包的捕获和分析软件,本实验通过Wires" "hark软件的安装使用,监控局域网的状态,捕获在局域网中传输的数据包" ",并结合在计算机网络课程中学习到的理论知识,对常用网络协议的数据" "包做出分析,加深网络课程知识的理解和掌握。具体内容及要求如下: " "Wireshark软件的安装; " "Wireshark软件的启动,并设置网卡的状态为混杂状态,使得Wireshark可" "以监控局域网的状态; " "启动数据包的捕获,跟踪PC之间的报文,并存入文件以备重新查; " "设置过滤器过滤网络报文以检测特定数据流; " "对常用协议的数据包的报文格式进行分析,利用协议分析软件的统计工具" "显示网络报文的各种统计信息。 " " " " " " " "2、实验二 网络层实验—Ping程序的设计与实现 " "实验目的 " "本实验目的是使学生掌握网络层协议的原理及实现方法。 " "实验设计内容 " "本实验为ICMP实验。实验内容:Ping命令实现的扩充,在给定的Ping程序" "的基础上做如下功能扩充: " "-h 显示帮助信息 " "-b 允许ping一个广播地址,只用于IPv4 " "-t 设置ttl值,只用于IPv4 " "-q 安静模式。不显示每个收到的包的分析结果,只在结束时,显示汇总 " "结果 " " " "Ping命令的基本描述 " "Ping的操作是向某些IP地址发送一个ICMP Echo消息,接着该节点返回一 " "个ICMP Echo replay消息。ICMP消息使用IP头作为基本控制。 " " " " " " " " " " " " " " " " " " " " " "二、实验环境 " " " "实验一 数据包的捕获与分析 " "1.联网计算机 " "2.Windows 或linux 系统 " "3.在PC中安装协议分析软件(如:Wireshark) " "4.物理基础: " "IEEE802.3 标准的以太网采用的是持续 CSMA " "的方式,正是由于以太网采用这种广播信道争用的方式,使得各个站点可" "以获得其他站点发送的数据。运用这一原理使信息捕获系统能够拦截的我" "们所要的信 " "5.工作模式: " "1) 广播模式(Broad Cast Model):它的物理地址(MAC)地址是 " "0Xffffff 的帧为广播帧,工作在广播模式的网卡接收广播帧。 " "2) 多播传送(MultiCast Model):多播传送地址作为目的物理地址的 " "帧可以被组内的其它主机同时接收,而组外主机却接收不到。但是,如果" "将网卡设置为 多播传送模式,它可以接收所有的多播传送帧,而不论它 " "是不是组内成员。 " "3) 直接模式(Direct " "Model):工作在直接模式下的网卡只接收目地址是自己 MAC地址的帧。 " "4) 混杂模式(Promiscuous Model):工作在混杂模式下的网卡接收所 " "有的流过网卡的帧,信包捕获程序就是在这种模式下运行的。 " " " " " " " "实验二 网络层实验—Ping程序的设计与实现 " "联网计算机 " "Linux系统 " "系统自带编译环境 " " " " " " " " " " " "程序的需求分析与逻辑框图 " "需求分析 " " " "1、实验一 " "数据包的捕获与分析 " " " "1>.在PC中安装协议分析软件。 " "2>.启动Wireshark协议分析软件,选择抓包菜单项启动实时监视器,开始" "实时跟踪显示网络数据报文。可根据系统提示修改显示方式。 " "3>.调出跟踪存储的历史报文,选择有代表性的ETHERNET,IEEE802.3,IP" ",ICMP,TCP,UDP报文,对照有关协议逐个分析报文各字段的含义及内容" "。 " "4>.设置过滤器属性,如目的地址,源地址,协议类型等。如过滤不需要 " "的网络报文,过滤器允许设置第二层,第三层或第四层的协议字段。 " " " " " " " " " "2、实验二 " "网络层实验—Ping程序的设计与实现 " " " "PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序给" "予ICMP使用ICMP的回送请求和回送应答来工作。ICMP是基于IP的一个协议" ",ICMP包通过IP的封装之后传递。实现检测网络通畅及速度的ping,并扩" "展以下功能: " "-h 显示帮助信息 " "-b 允许ping一个广播地址,只用于IPv4 " "-t 设置ttl值,只用于IPv4 " "-q 安静模式,不显示

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧