澳门威斯尼人最新网站Linux网络流量控制工具与管理方法介绍

当前,网络宽带不断升级,可是网络速度却常常不尽人意,给很多商家、企业带来了极大的困扰。网速不能满足工作的需要,就需要对宽带进行升级,也就意味着需要投入更多的资金,可成效并不显著,网速仍然在变缓。造成这种情况的原因是多样的,其中最重要的一点就是桌面宽带永远高于出口带宽。另外,随着网络时代的到来,人们对网络的依赖程度不断提高。近几年,P2P等下载软件和网络电视走入了人们的生活,使得本来就捉襟见肘的网络带宽上加霜。想要营造一个良好的网络环境,将P2P、网络视频等软件进行有效控制是关键。

相信大家对目前Linux网络流量的管理方法都有所了解了,并且希望找到一个更安全更有效的方法,今天在这里我们就像大家介绍一个更安全更有效的Linux网络流量安全管理方法,希望对大家有用。

相信大家对目前Linux网络流量的管理方法都有所了解了,并且希望找到一个更安全更有效的方法,今天在这里我们就像大家介绍一个更安全更有效的Linux网络流量安全管理方法,希望对大家有用。
网络流量捕捉:图形化工具Wireshark

本文转载在:

VC++获取本机网卡及网络流量的方法,vc网络流量

使用GetAdaptersInfo 和 GetIfTable获取本机网卡信息以及流量等信息。

#include "stdafx.h"
#include   
#include   
#include   

using namespace std;
#pragma comment(lib,"Iphlpapi.lib") //需要添加Iphlpapi.lib库  


int main(int argc, char* argv[])
{
    PIP_ADAPTER_INFO pIpAdapterInfo = new IP_ADAPTER_INFO();//PIP_ADAPTER_INFO结构体指针存储本机网卡信息  
    unsigned long stSize = sizeof(IP_ADAPTER_INFO);         //得到结构体大小,用于GetAdaptersInfo参数  
    int nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);     //调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量;其中stSize参数既是一个输入量也是一个输出量  

    int netCardNum = 0;//记录网卡数量   
    int IPnumPerNetCard = 0; //记录每张网卡上的IP地址数量  

    if (ERROR_BUFFER_OVERFLOW == nRel)
    {
        //如果函数返回的是ERROR_BUFFER_OVERFLOW  
        //则说明GetAdaptersInfo参数传递的内存空间不够,同时其传出stSize,表示需要的空间大小  
        //这也是说明为什么stSize既是一个输入量也是一个输出量                 
        delete pIpAdapterInfo;//释放原来的内存空间       
        pIpAdapterInfo = (PIP_ADAPTER_INFO)new BYTE[stSize];//重新申请内存空间用来存储所有网卡信息          
        nRel = GetAdaptersInfo(pIpAdapterInfo, &stSize);    //再次调用GetAdaptersInfo函数,填充pIpAdapterInfo指针变量  
    }
    if (ERROR_SUCCESS == nRel)
    {
        //输出网卡信息  
        //可能有多网卡,因此通过循环去判断  
        while (pIpAdapterInfo)
        {
            cout << "网卡数量:" << ++netCardNum << endl;
            cout << "网卡名称:" << pIpAdapterInfo->AdapterName << endl;
            cout << "网卡描述:" << pIpAdapterInfo->Description << endl;
            switch (pIpAdapterInfo->Type)
            {
            case MIB_IF_TYPE_OTHER:
                cout << "网卡类型:" << "OTHER" << endl;
                break;
            case MIB_IF_TYPE_ETHERNET:
                cout << "网卡类型:" << "ETHERNET" << endl;
                break;
            case MIB_IF_TYPE_TOKENRING:
                cout << "网卡类型:" << "TOKENRING" << endl;
                break;
            case MIB_IF_TYPE_FDDI:
                cout << "网卡类型:" << "FDDI" << endl;
                break;
            case MIB_IF_TYPE_PPP:
                printf("PP\n");
                cout << "网卡类型:" << "PPP" << endl;
                break;
            case MIB_IF_TYPE_LOOPBACK:
                cout << "网卡类型:" << "LOOPBACK" << endl;
                break;
            case MIB_IF_TYPE_SLIP:
                cout << "网卡类型:" << "SLIP" << endl;
                break;
            default:
                break;
            }
            cout << "网卡MAC地址:";
            for (DWORD i = 0; i < pIpAdapterInfo->AddressLength; i++)
                if (i < pIpAdapterInfo->AddressLength - 1)
                {
                    printf("%02X-", pIpAdapterInfo->Address[i]);
                }
                else
                {
                    printf("%02X\n", pIpAdapterInfo->Address[i]);
                }
            cout << "网卡IP地址如下:" << endl;
            //可能网卡有多IP,因此通过循环去判断  
            IP_ADDR_STRING *pIpAddrString = &(pIpAdapterInfo->IpAddressList);
            do
            {
                cout << "该网卡上的IP数量:" << ++IPnumPerNetCard << endl;
                cout << "IP 地址:" << pIpAddrString->IpAddress.String << endl;
                cout << "子网地址:" << pIpAddrString->IpMask.String << endl;
                cout << "网关地址:" << pIpAdapterInfo->GatewayList.IpAddress.String << endl;
                pIpAddrString = pIpAddrString->Next;
            } while (pIpAddrString);
            pIpAdapterInfo = pIpAdapterInfo->Next;
            cout << "--------------------------------------------------------------------" << endl;
        }
    }
    //释放内存空间  
    if (pIpAdapterInfo)
    {
        delete pIpAdapterInfo;
    }

    cout << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;

    MIB_IFTABLE   *pIfTable = NULL;
    ULONG          dwSize = 0;
    DWORD          dwRet;
    dwRet = GetIfTable(pIfTable, &dwSize, TRUE);
    if (dwRet == ERROR_INSUFFICIENT_BUFFER)
    {
        pIfTable = (MIB_IFTABLE *) new char[dwSize];
        if (pIfTable != NULL)
        {
            dwRet = GetIfTable(pIfTable, &dwSize, TRUE);
            if (dwRet == NO_ERROR)
            {
                printf("dwNumEntries = %u\n", pIfTable->dwNumEntries);
                for (int i = 0; i < pIfTable->dwNumEntries; i++)
                {
                    //MIB_IF_TYPE_ETHERNET ->以太网
                    if ((pIfTable->table[i]).dwType == MIB_IF_TYPE_ETHERNET && (pIfTable->table[i]).dwAdminStatus == 1 
                         && ((pIfTable->table[i].dwOperStatus) == MIB_IF_OPER_STATUS_OPERATIONAL))
                    {
                        printf("table[%1d].dwIndex = %u\n", i, (pIfTable->table[i]).dwIndex);
                        printf("\t dwType  = %u\n", (pIfTable->table[i]).dwType);
                        printf("\t dwSpeed = %u\n", (pIfTable->table[i]).dwSpeed);
                        printf("\t dwInByte = %u\n", (pIfTable->table[i]).dwInOctets);
                        printf("\t dwOutByte = %u\n", (pIfTable->table[i]).dwOutOctets);
                        printf("\t Descript = %s\n", (pIfTable->table[i]).bDescr); // friendly name

                        wcout << (pIfTable->table[i]).wszName << endl; // \DEVICE\TCPIP_{90B6A657-5D57-499F-ACC8-0F931B6B1ADC}, it contains netcard's name {xxxx-xxx-xxx}
                    }
                }
            }
            else
            {
                printf("Some error occured!\n");
            }
        }
        else
        {
            printf("Memory allocate failue\n");
        }
    }
    else
    {
        printf("Some error occured!\n");
    }

    system("pause");
    return 0;
}

使用GetAdaptersInfo 和 GetIfTable获取本机网卡信息以及流量等信息。
#include stdafx.h#include #incl…

1、局域网网络流量监控方法

澳门威斯尼人最新网站 1

1、Wireshark简介

基于TC技术的网络流量控制实战

网络流量监控的主要目的是对网络进行管理,其过程一般是:一、实时、不间断地采集网络数据。二、统计、分析所得数据。三、确认网络的主要性能指标。四、对网络进行分析管理。网络流量监控的方法主要有两种,一种是使用网络监控设备,另一种是使用网络流量监控软件。当前的局域网网络设备对于P2P这种模式没有很好的管理效果,导致P2P软件大行其道,占用了极多的带宽资源。当前,以下几种网络流量最为常见:

网络流量捕捉:图形化工具Wireshark

Ethereal是一个开放源码的Linux网络流量分析系统,也是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。Ethereal起初由Gerald
Combs开发,随后由一个松散的etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的Linux网络流量分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为ethereal添加新的协议解析器,如今ethereal已经支持五百多种协议解析。另外,网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。6月8号,Ethereal的作者Gerald
Coombs宣布了离开NIS的消息,因而Ethereal现改名为Wireshark。

澳门威斯尼人最新网站 2

1)P2P流量:P2P文件共享在网络带宽消耗方面是大户,夜间,有95%的网络带宽被P2P占用。

1、Wireshark简介

Linux网络流量分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。

澳门威斯尼人最新网站 3

2)FTP流量:FTP这项服务的应用比较早,且重要程度只比HTTP和SMTP稍低。P2P的出现,FTP的重要性再次降低,但其重要性仍然不可忽视。

Ethereal是一个开放源码的Linux网络流量分析系统,也是目前最好的开放源码的网络协议分析器,支持Linux和windows平台。Ethereal起初由Gerald
Combs开发,随后由一个松散的etheral团队组织进行维护开发。它目前所提供的强大的协议分析功能完全可以媲美商业的Linux网络流量分析系统,自从1998年发布最早的0.2版本至今,大量的志愿者为ethereal添加新的协议解析器,如今ethereal已经支持五百多种协议解析。

在Linux系统中,1992年Lawrence Berkeley Lab的Steven McCanne和Van
Jacobson提出了包过滤器的一种的实现,BPFBSD Packet
Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进。在window系统中,意大利人Fulvio
Risso和Loris
Degioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windows系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。

澳门威斯尼人最新网站 4

3)SMTP流量:电子邮件是企业之间交流的重要手段,是网络应用中不可或缺的一部分。据不完全统计,竟然有75%以上的用户将收发邮件作为上网的主要目的。再加上发送电子邮件是不另外收费的,所以被部分人当成广告工具,互联网中垃圾邮件的泛滥之势愈演愈烈。

另外,网络分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。6月8号,Ethereal的作者Gerald
Coombs宣布了离开NIS的消息,因而Ethereal现改名为Wireshark。

2、层次化的数据包协议分析方法

澳门威斯尼人最新网站 5

4)HTTP流量:互联网上应用最广泛的协议当属HTTP协议。再加上视频共享网站的兴起,HTTP占用的网络流量已经超过了P2P。

Linux网络流量分析系统首先依赖于一套捕捉网络数据包的函数库。这套函数库工作在在网络分析系统模块的最底层。作用是从网卡取得数据包或者根据过滤规则取出数据包的子集,再转交给上层分析模块。从协议上说,这套函数库将一个数据包从链路层接收,至少将其还原至传输层以上,以供上层分析。

取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层。由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。

本文出自 “李晨光原创技术博客”
博客,转载请与作者联系!

将以上这些流量种类分析清楚之后,我们就可以针对其特点,对症下药,以收获事半功倍的效果。

在Linux系统中,1992年Lawrence Berkeley Lab的Steven McCanne和Van
Jacobson提出了包过滤器的一种的实现,BPF(BSD Packet
Filter)。Libpcap是一个基于BPF的开放源码的捕包函数库。现有的大部分Linux捕包系统都是基于这套函数库或者是在它基础上做一些针对性的改进。在window系统中,意大利人Fulvio
Risso和Loris
Degioanni提出并实现了Winpcap函数库,作者称之为NPF。由于NPF的主要思想就是来源于BPF,它的设计目标就是为windows系统提供一个功能强大的开发式数据包捕获平台,希望在Linux系统中的网络分析工具经过简单编译以后也可以移植到windows中,因此这两种捕包架构是非常现实的。就实现来说提供的函数调用接口也是一致的。Ethereal网络分析系统也需要一个底层的抓包平台,在Linux中是采用Libpcap函数库抓包,在windows系统中采用winpcap函数库抓包。

图1所示就是一个简单的协议树。如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点比如图中的TCP和UDP协议就是IP协议的儿子节点)。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征字给自己的子节点协议提供可以互相区分开来的标识。比如tcp协议的port字段注册后。Tcp.port=21就可以认为是ftp协议,特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。

2、局域网流量控制与管理策略

2、层次化的数据包协议分析方法

在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。

在输出端口处建立一个队列,是流量控制过程中常用的做法。通过控制路由,也就是控制IP地址的方式,来达到控制的目的。

取得捕包函数捕回的数据包后就需要进行协议分析和协议还原工作了。由于OSI的7层协议模型,协议数据是从上到下封装后发送的。对于协议分析需要从下至上进行。首先对网络层的协议识别后进行组包还原然后脱去网络层协议头。将里面的数据交给传输层分析,这样一直进行下去直到应用层。由于网络协议种类很多,就Ethereal所识别的500多种协议来说,为了使协议和协议间层次关系明显。从而对数据流里的各个层次的协议能够逐层处理。Ethereal系统采用了协议树的方式。

由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。

2.1 通过路由控制流量

如果协议A的所有数据都是封装在协议B里的,那么这个协议A就是协议B是另外一个协议的儿子节点(比如图中的TCP和UDP协议就是IP协议的儿子节点)。我们将最低层的无结构数据流作为根接点。那么具有相同父节点的协议成为兄弟节点。那么这些拥有同样父协议兄弟节点协议如何互相区分了?Ethereal系统采用协议的特征字来识别。每个协议会注册自己的特征字。这些特征字给自己的子节点协议提供可以互相区分开来的标识。比如tcp协议的port字段注册后。Tcp.port=21就可以认为是ftp协议,特征字可以是协议规范定义的任何一个字段。比如ip协议就可以定义proto字段为一个特征字。

澳门威斯尼人最新网站 6

流量控制是相当部分路由器具有的常规功能。TP-Link
TL-R410、TL-R460等型号路由器最近也新增了“流量控制”功能,对局域网内的电脑进行带宽资源分配,对P2P下载进行管控,防止部分用户的过度占用,为大多数用户提供一个良好的上网环境。

在Ethereal中注册一个协议解析器首先要指出它的父协议是什么。另外还要指出自己区别于父节点下的兄弟接点协议的特征。比如ftp协议。在Ethereal中他的父接点是tcp协议,它的特征就是tcp协议的port字段为21。这样当一个端口为21的tcp数据流来到时。首先由tcp协议注册的解析模块处理,处理完之后通过查找协议树找到自己协议下面的子协议,判断应该由那个子协议来执行,找到正确的子协议后,就转交给ftp注册的解析模块处理。这样由根节点开始一层层解析下去。

图1  协议树简单图示

2.2 禁止P2P下载

由于采用了协议树加特征字的设计,这个系统在协议解析上由了很强的扩展性,增加一个协议解析器只需要将解析函数挂到协议树的相应节点上即可。

3、基于插件技术的协议分析器

P2P下载是占用带宽流量的主要原因,禁止方法主要是:使用注册表禁止P2P下载软件。编辑一个名字为KillP2P.reg的注册表文件,内容如下:

3、基于插件技术的协议分析器

所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它著名的应用实例有:媒体播放器winamp、微软的网络浏览器IE等。

WindowsRegistryEditorVersion5.00    [HKEY_CURRENT_USER\Software\M
icrosoft\Windows\CurrentVersion\Policies\Explorer]”DisallowRun”=dword:00000001[HKEY_CURRENT_U
SER\Software\Microsoft\Windows\CurrentVersion\Policies\
Explorer\DisallowRun]

所谓插件技术,就是在程序的设计开发过程中,把整个应用程序分成宿主程序和插件两个部分,宿主程序与插件能够相互通信,并且,在宿主程序不变的情况下,可以通过增减插件或修改插件来调整应用程序的功能。运用插件技术可以开发出伸缩性良好、便于维护的应用程序。它着名的应用实例有:媒体播放器winamp、微软的网络浏览器IE等。

由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。

“1”=”BT.exe”

由于现在网络协议种类繁多,为了可以随时增加新的协议分析器,一般的协议分析器都采用插件技术,这样如果需要对一个新的协议分析只需要开发编写这个协议分析器并调用注册函数在系统注册就可以使用了。通过增加插件使程序有很强的可扩展性,各个功能模块内聚。

“2”=”Thunder.exe”

4、安装Wireshark

“3”=”bitcomet.exe”

该软件有极其方便和友好的图形用户界面,并且能够使得用户通过图形界面的配置和选择,针对多块网卡、多个协议进行显示,效果非常好。目前最新版本为:Wireshark
1.0.3。安装该软件请按照如下步骤进行:

“4”=”……”

1.//将下载的最新版本软件拷贝到临时文件夹

“5”=”……”

2.# cp wireshark-1.0.3.tar.gz /usr/local/src/

如对某种P2P进行限制,将P2P下载软件的可执行文件填写到1、2后面,再将KillP2P.reg文件导入注册表后,重启机器,受KillP2P.reg限制的P2P软件就无法正常运行了。

3.//切换到临时文件夹目录

2.3 进行时间段管理

4.# cd /usr/local/src/

目前,部分路由器具有一定的时间限制的功能。所谓的时间限制就是对相关参数、功能进行监测,进而采取时间调度进程的方式,达到开与关的目的。

5.//解压缩文件

2.4 限定局域网主机速度

6.# tar -xvf wireshark-1.0.3.tar.gz

对局域网主机的上传速度和下载速度进行限制,允许P2P下载,但对速度有所限制,限制的最低标准就是不影响他人对带宽的正常使用。

另外,同Tcpdump一样,在编译Ethereal之前应先确定已经安装pcap库(libpcap),这是编译Wireshark时所必需的。如果该库已经安装,就可以执行下面的命令来编译并安装Wireshark:

3、局域网流量异常发现与处理

1.# cd wireshark-1.0.3

网络监控软件的合理运用可以很容易地找出局域网中流量不正常的电脑,是局域网畅通运转、安全运转、高效运转的有效保障。异常流量造成的结果,轻微时会降低局域网运行速度,严重时,可能会使局域网瘫痪。所以有必要找出流量异常的主机。

2.# ./configure

3.1 找出流量过大的电脑

3.# make

当发现流量异常时,首先需要做的就是找出流量异常的主机。网络监控软件可以帮助我们做到这一点。网络监控软件使用起来比较简单,在局域网中任何一台主机上安装都可以实现对整个局域网的监控。监控的内容有流量记录、网页记录、QQ聊天记录等,根据记录确定占用较多网络带宽的某个或者某几个电脑,从而达到找出“元凶”的目的。

4.# make install

3.2 对异常主机发出警告

当编译并安装好Wireshark后,就可以执行“wireshark”命令来启动Wireshark。

利用网络监控软件,可以很容易地找出流量异常的主机,下一步就是对该主机的使用者发出警告。这种警告不是现场的面对面警告,而是通告监控软件发出警告消息即可。为了方便警告消息的有效传达,应将对方电脑的信使服务功能开启。如果警告没有效果,那么就要采取进一步的措施,比如“禁止上网”,将其网络断开。

就目前情况而言,网络监控软件为网络管理提供了极大的帮助,是企业局域网管理的重要手段。

4、结语

流量监控软件是监控网络流量最简单、最有效的手段。企业的网络管理者,可以通过它将网络资源的占用情况透明化,并有针对性的进行管理。同时,企业的管理层还应该建立一套切合实际的上网制度,只有内外结合才能从根本上解决局域网流量控制与管理的问题。

相关文章