简单的网络端口扫描——你已手握刀剑,那么就准备战斗

这两天在分析一个样本时候,其中涉及到端口扫描这样的功能,自己又不太了解,所以专门查看了一下这方面的东西(主要是网络编程相关的东西),发现这个东西说的很高大上,其实真的使用起来也很容易实现,就自己实现了一个简易的代码。
原理其实很简单:就是通过指定的端口向指定的计算机发起连接,如果成功,就说明该计算机的目标端口是开放的,反之就是关闭的(当然,这个成功是在代码不出错的情况下)
主要的代码逻辑如下:
1、创建一个套接字
2、设置套接字内包含的地址以及端口信息,也就是说在进行扫描之前,要确保我们知道你要扫描的是哪一台计算机以及要扫描的目的端口是什么
3、通过指定端口向指定的计算机发起连接

#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
int main()
{
	//初始化Winsock库
	WORD Version = MAKEWORD(1, 1);
	WSAData wsadata;
	int x = 0;
	int i = 0;
	int result = WSAStartup(Version, &wsadata);
	if (result == 0)//初始化成功
	{
		//创建一个socket
			//设置结构体
		struct sockaddr_in Test;
		Test.sin_addr.S_un.S_addr = inet_addr(INADDR_ANY);//填写IP地址信息
		Test.sin_family = AF_INET;
		Test.sin_port = htons(445);//设置目的端口445

		SOCKET asocket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
		if (asocket)//创建成功
		{
			//测试是否能连接成功
			i = connect(asocket, (SOCKADDR *)&Test, sizeof(sockaddr));
			if (i)
			{
				x = WSAGetLastError();
				printf("失败原因是%d", x);
			}
			else
				printf("成功");
		}
		else
			printf("创建套结字失败");
	}
	else
		printf("初始化失败");
}

写在最后
可能有点贪心了,总是想把每个人都留在最初相遇的时候
总是在难过的时候发现今日事事彷佛在过去种种都有预兆

你可能感兴趣的:(C++编程)