多线程端口扫描的基本原理_多线程端口扫描c

hacker|
295

多线程怎么扫描指定的文件夹

这个问题太宽泛了,你的目录结构是怎么样的没有说明啊

多线程是基于目录名称扫描还是基于分区扫也没有要求

把我的理解说一下吧:

你要做:

多线程扫描一个目录,但是目录内容无法确定类型(是仅有文件还是内嵌目录)

提思路:

主线程扫描你要处理的目录,得到一个列表(文件+子目录),子线程对子目录进行再扫描,至于说开辟多少个线程,每个线程处理多少个子目录,这个可以简单设计为平均处理,即:得出子目录的个数,根据本机器的核心数(可以自动获取)进行平均处理。例如有10个子目录,4个核,那么就是3、3、2、2的分配方式(3、3、3、1也可以,取前者为了尽可能平衡)

不知道我的理解是否符合你的期望,欢迎追问。

C++ TCP端口扫描

差不多就是这样的吧

#include stdio.h

#include winsock.h

#pragma comment(lib,"wsock32.lib")

int main(int argc, char **argv)

{

SOCKET sd_client;

u_short iPortStart, iPortEnd, port;

struct sockaddr_in addr_srv;

char *pszHost;

WSADATA wsaData;

WORD wVersionRequested;

int err;

switch(argc)

{

case 2:

iPortStart = 0;

iPortEnd = 65535;

pszHost =argv[1];

break;

case 3:

iPortStart = iPortEnd = atoi(argv[2]);

pszHost =argv[1];

break;

case 4:

iPortStart = atoi(argv[2]);

iPortEnd = atoi(argv[3]);

pszHost =argv[1];

break;

default:

printf("正确的命令行参数:\n");

printf("[IP] 扫描所有端口\n");

printf("[IP] [端口]:扫描单个端口\n");

printf("[IP] [端口1] [端口2]:扫描端口1到端口2\n");

return 1;

}

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, wsaData );

if ( err != 0 )

{

printf("Error %d: Winsock not available\n", err);

return 1;

}

for(port=iPortStart; port=iPortEnd; port++)

{

sd_client = socket(PF_INET, SOCK_STREAM, 0);

if (sd_client == INVALID_SOCKET)

{

printf("no more socket resources\n");

return 1;

}

addr_srv.sin_family = PF_INET;

addr_srv.sin_addr.s_addr=inet_addr(pszHost);

addr_srv.sin_port = htons(port);

err = connect(sd_client, (struct sockaddr *) addr_srv, sizeof(addr_srv));

if (err == INVALID_SOCKET)

{

printf("不能连接此端口:%d\n", port);

closesocket(sd_client);

continue;

}

printf("扫描此端口成功:%d\n", port);

closesocket(sd_client);

}

WSACleanup();

return 0;

}

试给出x的范围。

解:用差比较法。

(x+3)(x--2)--(x--3)(x+1)

=(x^2+x-6)--(x^2--2x--3)

=x^2+x--6--x^2+2x+3

=3x--3

=3(x--1)

当 x1时,3(x--1)0, 即:(x+3)(x--2)(x--3)(x+1).

当 x=1时,3(x--1)=0, 即:(x+3)(x--2)=(x--3)(x+1).

当 x1时,3(x--1)0, 即:(x+3)(x--2)(x--3)(x+1)。

0条大神的评论

发表评论