网络流量的自相似分布的实现。

解决方案 »

  1.   

    提供两种开发思路,
    一,类似后门程序。这是主动监听方式。通过打开一个端口来实现,需要建立连接(TCP)
    二,被动式监听。这种方式受网络得体系结构影响巨大,分布式得网络结构只能监听自己得数据包。通过分析各种协议来实现。网上这样得文章多得是
    1利用WinPcap,2利用2000 DDK
      

  2.   

    产生自相似分布可以用下面的方法:
    叠加大量的ON/OFF源,每个源有两个状态,即ON和OFF。在ON状态,以连续速率发送数据包,在OFF状态,不发送数据包。每个发生源ON或OFF的时长独立地符合重尾分布(Heavy-tailed distribution)
    重尾分布—若一随机变量满足重尾分布,则P[X>x] ~ x-α,当x→∞, 0<α<2。最简单的重尾分布是佩瑞多(Pareto)分布,其概率密度函数为p(x)=αkα x-α-1,α,k>0,x≥k,分布函数为F(x)=P[X≤x]=1-(k/x)α,当α减小,大量的概率质量集中在分布的尾部
    H=(3-α)/2
    --------------------------------------------------------
    参考资料《西安交通大学学报》 2001年第8期
    论文:一种经验型的自相似流生成方法
    作者:吴泽民,俞正德,郑少仁
    (解放军理工大学通信工程学院,210016,南京)顺便问句楼主学过分形几何吗?
      

  3.   

    如果你能上教育网就很容易,登陆CNKI数据库检索。
      

  4.   

    帮我看一个程序吧 
    一个发送方:#include"common.h"
    #define SERVER_PORT 2400
    char sendbuff[MAX];
    double AverageRandom(double,double);//平均分布的随机数
    double Possion( double);//产生泊松分布的随机数
    void main()
    {
    SOCKET sockfd;
    int i=0,mount;
    char server_ip[MAX];
    WSADATA wsaData;
    double lamda=10;//参数
    FILE*fid;

    printf("请输入目的地址的IP地址:");
    char c=getchar();
    while(c!='\n')
    {
    server_ip[i++]=c;
    c=getchar();
    }
    server_ip[i]='\0';
    printf("%s\n",server_ip);
    WSAStartup(Win_version,&wsaData);
    sockfd=socket(AF_INET,SOCK_DGRAM,0);    struct sockaddr_in serveraddr;
    memset(&serveraddr,0,sizeof(struct sockaddr_in));
    serveraddr.sin_family=AF_INET;
    serveraddr.sin_port=htons(SERVER_PORT);
    serveraddr.sin_addr.s_addr=inet_addr(server_ip); if(sendto(sockfd,sendbuff,MAX,0,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr_in))==SOCKET_ERROR)
    {
    printf("发送失败,退出,error=%d\n",WSAGetLastError());
    closesocket(sockfd);
    WSACleanup();
    exit(1);
    }
        fid=fopen("d:\\software\\Matlab\\work\\send.txt","w");
    srand((unsigned)time(NULL)); 
    mount=0;
    //发送n个大小为500字节的包
    while( mount<100000)
    {
    double n=Possion(lamda);
    fprintf(fid,"%d,",int(n));
    for(i=0;i<int(n);i++)  
    {sendto(sockfd,sendbuff,MAX,0,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr_in));}
    mount++;
    printf("%g,",n);
    Sleep(100);//每隔一百毫秒发送一次数据
    }
    fclose(fid);
    closesocket(sockfd);
    WSACleanup();
    }每隔一百毫秒发送一定数目的包,包的数目是Possion( double)产生的随机数,符合泊松分布接受方:
    void main()
    {
    SOCKET sockfd;
    struct sockaddr_in localaddr,remoteaddr;
    WSADATA wsaData;
        int count[N];
    unsigned long int mode=1;
    DWORD firstime,lastime;
    FILE*fp; for(int i=0;i<N;i++)
     count[i]=0; if(WSAStartup(Win_version,&wsaData)==SOCKET_ERROR)
    {
    printf("初始化失败!\n");
    exit(0);
    }
    if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==INVALID_SOCKET)
    {
    printf("创建插口失败!\n");
    WSACleanup();
    exit(1);
    }
        memset(&localaddr,0,sizeof(struct sockaddr_in));
    localaddr.sin_family=AF_INET;
    localaddr.sin_port=htons(SERVER_PORT);
    localaddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);// if(bind(sockfd,(struct sockaddr*)&localaddr,sizeof(struct sockaddr_in))==SOCKET_ERROR)
    {
    printf("绑定失败,error=%d\n",WSAGetLastError());
    closesocket(sockfd);
    WSACleanup();
    exit(2);
    }    memset(&remoteaddr,0,sizeof(struct sockaddr_in));
        int len=sizeof(struct sockaddr_in);
    if(recvfrom(sockfd,recvbuff,MAX,0,(struct sockaddr*)&remoteaddr,&len)==SOCKET_ERROR)
    {
    printf("接受失败! error=%d\n",WSAGetLastError());
    closesocket(sockfd);
    WSACleanup();
    exit(3);
    }

    printf("开始接受!\n");
    //ioctlsocket(sockfd,FIONBIO,&mode);


    fp=fopen("d:\\software\\Matlab\\work\\text.txt","w+");
    /*while(i<=N)
    {
           while((lastime-firstime)<100)//100毫秒接受
       {
    if(recvfrom(sockfd,recvbuff,MAX,0,(struct sockaddr*)&remoteaddr,&len)!=SOCKET_ERROR)
    count[i]++;
    lastime=GetTickCount();
       }
       printf("%d,",count[i]);
       fprintf(fp,"%d,",count[i]);
       firstime=lastime;
       i++;
    }*/ i=0;
    firstime = lastime=GetTickCount();
     do
     {
            while((lastime-firstime)<100)//100毫秒接受
    {
        if(recvfrom(sockfd,recvbuff,MAX,0,(struct sockaddr*)&remoteaddr,&len)!=NULL)
     count[i]++;
     lastime=GetTickCount();
    }
        printf("%d,",count[i]);
        fprintf(fp,"%d,",count[i]);
       //
        firstime=lastime;
        i++;
     }while(i<N-1);printf("do-while over!\n");  fclose(fp);
         closesocket(sockfd);
     WSACleanup();

    }
    每隔一百毫秒接受,但是结果总是第一次发包的个数比第一次受到的要少一个,最后一次发的包会收不到
    请不吝赐教
    谢谢!!