C++ TCP端口扫描

C++ TCP端口扫描,第1张

差不多就是这样的吧

#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=iPortStartport<=iPortEndport++)

{

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

}

TCP

SYN扫描

这种技术通常认为是“半开放”扫描,这是因为扫描程序不必要打开一个完全的TCP连接。扫描程序发送的是一个SYN数据包,好象准备打开一个实际的连接并等待反应一样(参考TCP的三次握手建立一个TCP连接的过程)。一个SYN|ACK的返回信息表示端口处于侦听状态。一个RST返回,表示端口没有处于侦听态。如果收到一个SYN|ACK,则扫描程序必须再发送一个RST信号,来关闭这个连接过程。这种扫描技术的优点在于一般不会在目标计算机上留下记录。但这种方法的一个缺点是,必须要有root权限才能建立自己的SYN数据包。

TCP扫描技术

最基本的利用TCP扫描就是使用connect(),这个很容易实现,如果目标主机能够connect,就说明一个相应的端口打开。不过,这也是最原始和最先被防护工具拒绝的一种。

在高级的TCP扫描技术中主要利用TCP连接的三次握手特性和TCP数据头中的标志位来进行,也就是所谓的半开扫描。

总的说来syn扫描速度更快,结果一样

TCP connect 扫描:

TCP connect 扫描是最基本的TCP扫描方式。connect()是一种系统调用,由 *** 作系统提供,用来打开一个连接。如果目标端口有程序监听,connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12137685.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存