分享

基于Linux的C语言Socket多线程网络端口压力测试程序

 孤独一兵 2016-11-10

网络压力测试连接安全探测第一步是发起多个线程同时连接一个端口,作为老司机,这里提供一套简单的多线程Socket连接压力测试程序,通过发起多个连接,来判断服务器响应能力。

可以指定多个线程同时连接,代码基于Linux下编译并运行成功,如下(文件名scan.c):

  1. #include

  2. #include

  3. #include

  4. #include

  5. #include

  6. #include

  7. #include

  8. #include

  9. #include

  10. #include

  11. #include

  12. #include

  13. #include

  14. char strIP[20];

  15. int nPort=0;

  16. int nThreadNum=0;

  17. int nThreadCurNum=0;

  18. void* ProcessThreadProc(void *pPara)

  19. {

  20. struct sockaddr_in serverAddr;

  21. int clientSocket;

  22. char sendbuf[200];

  23. char recvbuf[200];

  24. if((clientSocket=socket(AF_INET,SOCK_STREAM,0)) < 0 )

  25. {

  26. nThreadCurNum--;

  27. perror( 'socket error' );

  28. return NULL;

  29. }

  30. serverAddr.sin_family=AF_INET;

  31. serverAddr.sin_port=htons(nPort);

  32. serverAddr.sin_addr.s_addr=inet_addr(strIP);

  33. if(connect(clientSocket,( struct sockaddr * )&serverAddr,sizeof(serverAddr)) < 0)

  34. {

  35. nThreadCurNum--;

  36. perror( 'Connect error' );

  37. return NULL;

  38. }

  39. printf('Connect with destination host OK .....\n');

  40. while(1)

  41. {

  42. sleep(1);

  43. }

  44. close(clientSocket);

  45. nThreadCurNum--;

  46. return NULL;

  47. }

  48. main()

  49. {

  50. int i = 0;

  51. int nFlag = 0;

  52. int nSuccessNum = 0;

  53. printf('Input IP:>');

  54. scanf('%s',strIP);

  55. printf('%s\n',strIP);

  56. printf('Input Max Port:>');

  57. scanf('%d',&nPort);

  58. printf('%d\n',nPort);

  59. printf('Input Thread NuM:>');

  60. scanf('%d',&nThreadNum);

  61. printf('%d\n',nThreadNum);

  62. nThreadCurNum = nThreadNum;

  63. for(i=0; i < nThreadNum; i++)

  64. {

  65. pthread_t num;

  66. nFlag = pthread_create(&num, NULL, ProcessThreadProc, (void *)i);

  67. if(nFlag != 0)

  68. {

  69. printf('Error: Thead Error [%d]....\n',i);

  70. nThreadCurNum--;

  71. }

  72. else

  73. nSuccessNum++;

  74. }

  75. printf('Success Num: %d Failed Num: %d \n',nSuccessNum,nThreadNum-nSuccessNum);

  76. while(true)

  77. {

  78. printf('Current Num: %d\n',nThreadCurNum);

  79. sleep(2);

  80. }

  81. return 0;

  82. }

通过gcc编译,编译时注意加上-lpthread gcc -o scan scan.c -lpthread,然后运行即可。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多