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

hamzsy 2005-11-04 04:19:01
我要监视通过网卡的数据流,并分析,根据数据类型做一定的统计,有这样的相关开源软件吗?
...全文
344 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

4,465

社区成员

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

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