网络压力测试连接安全探测第一步是发起多个线程同时连接一个端口,作为老司机,这里提供一套简单的多线程Socket连接压力测试程序,通过发起多个连接,来判断服务器响应能力。 可以指定多个线程同时连接,代码基于Linux下编译并运行成功,如下(文件名scan.c):
#include #include #include #include #include #include #include #include #include #include #include #include #include char strIP[20]; int nPort=0; int nThreadNum=0; int nThreadCurNum=0; void* ProcessThreadProc(void *pPara) { struct sockaddr_in serverAddr; int clientSocket; char sendbuf[200]; char recvbuf[200]; if((clientSocket=socket(AF_INET,SOCK_STREAM,0)) < 0 ) { nThreadCurNum--; perror( 'socket error' ); return NULL; } serverAddr.sin_family=AF_INET; serverAddr.sin_port=htons(nPort); serverAddr.sin_addr.s_addr=inet_addr(strIP); if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < 0) { nThreadCurNum--; perror( 'Connect error' ); return NULL; } printf('Connect with destination host OK .....\n'); while(1) { sleep(1); } close(clientSocket); nThreadCurNum--; return NULL; } main() { int i = 0; int nFlag = 0; int nSuccessNum = 0; printf('Input IP:>'); scanf('%s',strIP); printf('%s\n',strIP); printf('Input Max Port:>'); scanf('%d',&nPort); printf('%d\n',nPort); printf('Input Thread NuM:>'); scanf('%d',&nThreadNum); printf('%d\n',nThreadNum); nThreadCurNum = nThreadNum; for(i=0; i < nThreadNum; i++) { pthread_t num; nFlag = pthread_create(&num, NULL, ProcessThreadProc, (void *)i); if(nFlag != 0) { printf('Error: Thead Error [%d]....\n',i); nThreadCurNum--; } else nSuccessNum++; } printf('Success Num: %d Failed Num: %d \n',nSuccessNum,nThreadNum-nSuccessNum); while(true) { printf('Current Num: %d\n',nThreadCurNum); sleep(2); } return 0; }
通过gcc编译,编译时注意加上-lpthread gcc -o scan scan.c -lpthread,然后运行即可。
|