日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多线程socket 端口扫描程序,实现了,但是速度不行,求指点。

發(fā)布時(shí)間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多线程socket 端口扫描程序,实现了,但是速度不行,求指点。 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#pragma comment(lib,"ws2_32.lib")
#include <stdio.h>
#include <winsock2.h>
#define MAXTHREAD 500
#define PORTSTART 1
#define PORTEND 60000
#define TIMEOUT 1
#define WAITTIME 10
#define IP "61.135.169.105"? //百度地址
FILE * logHandle;
DWORD PortScan(LPVOID lp);
typedef struct
{
?? ?SOCKET s;
?? ?sockaddr_in addr;
} mySocket;//傳遞參數(shù)
int threadCount = 0;
CRITICAL_SECTION c;
int main()
{
?? ?
?? ?WSADATA ws;
?? ?InitializeCriticalSection(&c);
?? ?fopen_s(&logHandle,"C:\\Documents and Settings\\Administrator\\桌面\\log.txt","w+");
?? ?int nRet = WSAStartup(MAKEWORD(2,2),&ws);
?? ?if(nRet !=0)
?? ?{
?? ??? ?fprintf(logHandle,"Failed to initial the socketdll,%ld\n",WSAGetLastError());
?? ??? ?return 1;
?? ?}
?? ?for(int i=PORTSTART;i<=PORTEND;i++)
?? ?{?? ?
?? ??? ?mySocket *listenSocket = new mySocket;
?? ??? ?listenSocket->s = socket(AF_INET,SOCK_STREAM,0);
?? ??? ?if(listenSocket->s == INVALID_SOCKET)
?? ??? ?{
?? ??? ??? ?fprintf(logHandle,"create socket error with %ld\n",WSAGetLastError());
?? ??? ??? ?return 1;
?? ??? ?}

?? ??? ?listenSocket->addr.sin_addr.s_addr = inet_addr(IP);
?? ??? ?listenSocket->addr.sin_family = AF_INET;
?? ??? ?memset(listenSocket->addr.sin_zero,0,8);
?? ??? ?listenSocket->addr.sin_port = htons(i); //創(chuàng)建監(jiān)聽的socket
?? ??? ?

?? ??? ?while(threadCount >MAXTHREAD)
?? ??? ?{
?? ??? ??? ?Sleep(5000);
?? ??? ?}
?? ??? ?if(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)PortScan,(LPVOID)listenSocket,NULL,NULL))
?? ??? ?{
?? ??? ??? ?threadCount ++;
?? ??? ?}
?? ?}
?? ?while(threadCount >0)
?? ?{
?? ??? ?Sleep(5000);
?? ?}
?? ?WSACleanup();

?? ?return 0;
}
DWORD PortScan(LPVOID lp)
{
?? ?int nRet;
?? ?mySocket *s = (mySocket *)lp;
?? ?//EnterCriticalSection(&c);
?? ?int port = ntohs(s->addr.sin_port);

?? ?connect(s->s,(sockaddr *)&s->addr,sizeof(sockaddr_in));
?? ?unsigned long flag = 1;
?? ?nRet = ioctlsocket(s->s,FIONBIO,&flag);
?? ?if(nRet != 0)
?? ?{
?? ??? ?fprintf(logHandle,"ioc error with %ld\n",WSAGetLastError());
?? ?}
?? ?fd_set mask;
?? ?FD_ZERO(&mask);
?? ?FD_SET(s->s,&mask);
?? ?struct timeval tm = {1,0};
?? ?switch(select(0,NULL,&mask,NULL,&tm))
?? ?{
?? ?case -1:
?? ??? ?fprintf(logHandle,"%d port connect error %ld\n",port,WSAGetLastError());
?? ??? ?break;
?? ?case 0:
?? ??? ?fprintf(logHandle,"%d port time out\n",port);
?? ??? ?break;
?? ?default:
?? ??? ?fprintf(logHandle,"%d port open\n",port);
?? ?}
?? ?closesocket(s->s);
?? ?threadCount --;
?? ?delete s;
?? ?//LeaveCriticalSection(&c);
?? ?return 0;
}

轉(zhuǎn)載于:https://www.cnblogs.com/S-volcano/archive/2012/09/04/2670731.html

總結(jié)

以上是生活随笔為你收集整理的多线程socket 端口扫描程序,实现了,但是速度不行,求指点。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。