端口扫描软件的代码在网上很多,可是并不一定适合基础不深的鸟鸟们学。要不就是代码大多都很长而且使用了多线程(关于多线程的很多概念就够闹腾的了,扫描部分就更算了),让我等小菜都望而生畏;要不就是速度很慢,学会了也派不上用场。今天我就介绍一下自己学习winsock后写的端口扫描软件吧! 端口扫描软件的基本思路就不说了,没有什么很难的算法,大家想想就应该知道的,只要从起始端口到结尾端口都遍历一遍,找到打开的端口输出就可以了。大体的就是这个样子:for(CurrPort=StartPort;CurrPort<=EndPort;CurrPort++) {scan的执行体; }。这个软件没有使用到多线程技术,也就不用考虑那么多的关于多线程的概念了。因此我们的这个扫描软件从两个方面来讨论,第一方面是如何可以找到打开的端口,第二方面是如何提高扫描端口的速度。 一、找到打开的端口 在介绍如何找到打开的端口以前,让我们先来认识一个函数——connect()。connect函数将一个流套接字连接到指定IP地址的指定端口上。connect函数的用法:int connect(SOCKET s,const struct sockaddr FAR* name,int namelen);参数s指定用于连接的套接字句柄,name参数指向一个sockaddr_in结构,用来指定要连接到的服务器的IP地址和端口,namelen参数则指定sockaddr_in结构的长度。这个参数连接成功的时候,函数返回0,否则返回值是SOCKET_ERROR。connect函数的用法大体我们就说这么多了。说到这里大家应该想到了吧?我们用connect函数的返回值进行判断,找到打开的端口号。好,看下具体的代码,有详细的注释,如果对函数不明白可以到MSDN或网上查询。 int scan(char *Ip, int StartPort, int EndPort) { clock_t StartTime,EndTime; //扫描的开始时间和结束时间 float CostTime; //扫描过程中耗费的时间 WSADATA wsa; SOCKET s; struct sockaddr_in server; int CurrPort; //当前端口 int ret; WSAStartup(MAKEWORD(2,2),&wsa); //使用winsock函数之前,必须用WSAStartup函数来装入并初始化动态连接库 server.sin_family=AF_INET; //指定地址格式,在winsock中只能使用AF_INET server.sin_addr.s_addr=inet_addr(Ip); //指定被扫描的IP地址 StartTime=clock(); for(CurrPort=StartPort;CurrPort<=EndPort;CurrPort++) { s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); //创建套接字 /* SOCKET socket(int af,int type,int protocol); 为通信连接创建一个套接字 af参数: 指定套接字地址格式,在winsock中只能使用AF_INET type参数: 套接字类型,这里使用了SOCK_STREAM,流套接字 protocol参数:配合type使用,指定协议类型,这里使用IPPROTO_TCP(就是TCP协议) */ server.sin_port=htons(CurrPort); //指定被扫描IP地址的端口号 ret=connect(s,(struct sockaddr *)&server,sizeof(server)); //连接 if(0==ret) //判断连接是否成功 { printf("%s:%d\n",Ip,CurrPort); closesocket(s); } } EndTime=clock(); CostTime=(float)(EndTime-StartTime)/CLOCKS_PER_SEC; printf("Cost time:%f second\n",CostTime); //输出扫描过程中耗费的时间 WSACleanup(); //释放动态连接库并释放被创建的套接字 return 1; }
2021-12-17 09:26:35 7KB 端口扫描软件
1
用C++实现职工信息管理系统,主要实现信息的增删改查,最好可以实现信息的处理
2021-12-17 02:37:28 11KB 用C++ 增删改查 职工信息管理
1
【应用C】C语言实现批处理操作系统的高响应比作业调度(+源代码)-附件资源
2021-12-16 21:55:38 23B
1
用c++实现的主成分分析,适合遥感技术应用.
2021-12-16 21:54:29 4KB 遥感 主成分
1
①不是真正的RTOS ②并没有真正实现任务调度,就是个软件定时器 ③方便初学者学习
2021-12-16 21:00:16 2KB C语言 RTOS
1
设停在铁路调度站的车厢N个,标号为1,2,3,...,N,编程求出所有可能的由此输出长度为N的车厢序列。
2021-12-16 19:29:21 942B 车厢调度
1
一、功能:具有人性化界面的通讯录程序,可实现增加,删除,修改联系人 二、知识点: 1.文件输入(fprintf)/输出(fscanf) 2.数组与指针(指针表示地址,偏移量为1,指针值得变化取决于它所指向的数据类型。例如,如果是int *p,则值需要加4) 3.函数(函数的形参,如果是指针,则改变指针所指向的内存单元的值,函数结束后该地址的存储的值已经改变。如果传进来的是普通变量的值,而不是地址,则函数结束后,该变量的值依然不会发生改变) 4.多文件编译(使用头文件,把多个.c文件中的具体功能函数,实现被其他文件函数的调用) 5.图形化界面(使用EasyX 库,在dos窗口画人性化界面) 三、工程的代码 代码量1200行左右,简洁和良好的编程风格,每个函数都有自己的功能介绍,变量即重要语句都有注释,非常适合阅读。
2021-12-16 17:14:06 3.54MB c语言 图形界面 通讯录
1
这是一个数独游戏的源代码,是用C语言描述的,里面包括数独游戏的界面和具体的源程序。
2021-12-16 16:36:16 387KB 数独游戏,源程序
1
使用java调用C++的dll文件
2021-12-16 14:15:34 6KB JNI
1
还行,需要的下载了看看!
2021-12-16 13:52:54 4.04MB c++
1