网络流量的自相似分布的实现。
解决方案 »
- 创建一个CEdit,怎么变成了滚动条?
- 问一个关于数组越界的问题
- 求助:高手进来指条明路。
- 在DLL中已将全局变量设为共享,但结果显示并没有共享,这是什么原因?
- 求VISUAL c++6.0的下载连接SP6 OR SP4
- 如何获得使用CreateDispatch创建的新进程的句柄?
- GL_MATRIX_MODE,GL_MODELVIEW_MATRIX,GL_PROJECTION_MATRIX对画图有什么影响?
- 给一块儿win2000关机的代码,给分!
- 如何得到一个控件相对于客户区的矩形?
- [非MFC]GDI+的DrawImage()函数效率太低了,
- 如何捕获_RecordsetPtr 添加一条记录时的错误信息
- 如何使两个工具条合并成一行,就是排列在一行内
一,类似后门程序。这是主动监听方式。通过打开一个端口来实现,需要建立连接(TCP)
二,被动式监听。这种方式受网络得体系结构影响巨大,分布式得网络结构只能监听自己得数据包。通过分析各种协议来实现。网上这样得文章多得是
1利用WinPcap,2利用2000 DDK
叠加大量的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,南京)顺便问句楼主学过分形几何吗?
一个发送方:#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();
}
每隔一百毫秒接受,但是结果总是第一次发包的个数比第一次受到的要少一个,最后一次发的包会收不到
请不吝赐教
谢谢!!