一个典型的TCP端口扫描器,通过用connect函数对服务器进行尝试连接来判断该服务器上的端口是否开放。这个扫描器是多线程的,现在的Winsock编程大多数采用多线程技术,这样可以充分利用带宽,如Netants的5个蚂蚁下载,一些FTP软件的多线程上传,等等!
//Source Code In C++Builder5
#pragma hdrstop
#include “Unit1.h”
#define threadNum 10//线程数
#define mutexName “Welcome to LoveBcb.yeah.net”
#pragma package(smart_init)
#pragma resource “*.dfm”
typedef struct g_scan //这是一个自定义的结构
{
char szFile[40];//用于存放结果的文件名
char szMutex[40];//用于存放互斥体的名字,这是多线程保证线程安全的一种方法
unsigned short sPort;//扫描的起始端口,本机字节顺序
unsigned short ePort;//扫描的终止端口,本机字节顺序
unsigned long goalI;//目标主机IP,网络字节顺序
int Result;//用于存放结果
}*PG_SCAN;
TForLover *ForLover;//这是窗体
HANDLE hThread[threadNum];
g_scan gscan[threadNum];
DWORD dwThreadId,dwThreadCode;
unsigned short usPart;//用于分割所要扫描的端口数,分配给各个线程
unsigned long ulIp;
int iLiveThread;//用于存放活动的线程数
unsigned long ServerIp(char*serverip);
DWORD WINAPI ScanPort(LPVOID lp)
/*这是主线程函数ScanPort*/
DWORD WINAPI ScanPort(LPVOID lp)
{
PG_SCAN pgscan=(PG_SCAN)lp;
char szResult[40];
sockaddr_in sock;
unsigned short nowPort=pgscan→sPort-1;//用于存放当前扫描的端口号
FILE*fp;//文件指针
HANDLE hMutex=OpenMutex(MUTEX_ALL_ACCESS,false,pgscan→szMutex);
SOCKET sk=socket(AF_INET,SOCK_STREAM,0);
sock.sin_family=AF_INET;
sock.sin_addr.s_addr=pgscan→goalIp;
while(nowPort
{
sock.sin_port=htons(++nowPort)
if(connect(sk,(sockaddr*)&sock,sizeof(sock))==SOCKET_ERROR)
continue;
/*由于这里用的是阻塞方式的套接字,所以返回SOCKET_ERROR一般意味着无法连接,于是用continue结束本次循环,即重新开始一次循环。如果返回值不是SOCKET_ERROR的话,表示连接成功,也就是说目标主机上开放了此端口*/
wsprintf(szResult,“目标主机:%s端口:%d开放\r\n”,inet_ntoa(sock.sin_addr),nowPort); WaitForSingleObject(hMutex,INFINITE);
/*用WaitForSinleObject保证线程安全INFINITE表示一直等待,直到互斥体有信号*/
fp=fopen(pgscan→szFile,“a”);
fwrite(szResult,sizeof(char),strlen(szResult),fp);
fclose(fp);
pgscan→Result++;
ReleaseMutex(hMutex);//释放互斥体
closesocket(sk);//由于已经建立了连接,所以这里要关闭连接
sk=socket(AF_INET,SOCK_STREAM,0);//重新创建一个套接字
}
分享到:
相关推荐
在这样的系统中,通常会有三个主要角色:服务器、客户端和用户。以下是关于这个话题的一些关键知识点: 1. **Socket编程基础**:Socket是网络通信的一种接口,它允许两个或更多的进程通过网络进行数据交换。在PHP中...
SOCKET三大通讯问题,关于开发SOCKET开发过程经常遇到的三个问题
客户端界面程序则提供友好的用户交互,允许用户输入三角形的三边长度,通过Socket发送请求,并显示服务器返回的面积。 总的来说,这个项目涵盖了Socket编程的基础知识,包括TCP连接的建立、数据交换,以及多并发...
综上所述,"DELPHI 用SOCKET搭的三层架构 经测试通过"意味着开发者已经成功地使用DELPHI实现了基于SOCKET的三层架构应用程序,并且经过了一系列的测试,确认了其功能的正确性和稳定性。这样的项目对于需要构建分布式...
根据通信特点,Socket可以分为流式Socket、数据报Socket和原始Socket三种类型。流式Socket提供了面向连接的服务,保证数据可靠传输,适合需要稳定连接的通信场景。数据报Socket提供无连接服务,传输的数据独立、无序...
分别在SendSocket和ReceiveSocket函数里加上Sleep(0)即可修补由于文件过大导致的错误。Sleep(0):提交控制权 Simplex 单工通信 Full-Duplex 全双工通信 TransmitFile 双向文件传输 大文件传输过程发现接收端和发送...
使用Socket方式的3层结构源码,只有新增,修改,删除等功能。远程服务器duancy.gnway.net是一个登录在我公司电脑上的动态域名,所以,要测试连接的话,最好在上午9:30到下午18:30。我不是高手,只希望一起学习!
PB115版本源代码,基于pslib21.dll + winsick.pbl; 由于是用中间层代理访问数据库,存取效率是最大的缺陷! 如果是检索数据量较大的DW,可以考虑加写 top n 减少数据返回量. 欢迎QQ(370801979)交流!
**三、项目结构及文件** 1. **SuperSocket.Mono.sln**、SuperSocket.2010.NET35.sln等.sln文件:这些都是Visual Studio的解决方案文件,用于管理和构建SuperSocket项目。 2. **LICENSE.TXT**和**README.TXT**:...
创建一个Socket需要进行三次握手,关闭时也需要四次挥手,这个过程涉及网络I/O操作,可能会比较耗时。当频繁创建和销毁Socket时,这种开销尤为明显。 为了解决这个问题,引入了Socket池(或Socket连接池)。Socket...
本篇文章将深入讲解如何通过三步学习Java Socket编程。 **第一步:理解Socket** Socket,又称为“套接字”,是网络通信中的一个抽象概念,它封装了IP地址和端口号,是网络通信链路的句柄。在Java中,Socket和...
《Delphi三层架构下的Socket连接源码解析》 在软件开发中,三层架构是一种常见的设计模式,它将应用逻辑划分为三个独立的层次:表现层(用户界面)、业务逻辑层(处理业务规则)和数据访问层(处理数据存储)。本文...
- TCP是一种面向连接的、可靠的传输层协议,它通过三次握手建立连接,并在数据传输前确保连接的可靠性。 - TCP提供顺序的数据传输,确保数据按照发送的顺序到达接收方,如果数据在传输过程中丢失,TCP会进行重传。...
在IT行业中,网络通信是至关重要的一个领域,而Socket编程是构建网络应用程序的基础。本资源“基于HPSocket实现socket通讯 - 修正版 ( C# demo 、 C++ dll )”提供了一种实用的方法,帮助开发者高效地实现跨平台的...
在提供的文件名称列表"SocketTest3"中,我们可以推测这可能是一个Socket测试工具的第三个版本,或者包含一系列关于Socket测试的案例或代码示例。使用此类工具,开发者可以更好地理解和优化他们的Socket应用程序,...
使用TCP的Socket通信通常涉及三次握手建立连接、数据传输和四次挥手断开连接的过程。SocketTool作为TCP服务端,可以模拟服务器接收客户端的连接请求,并返回数据;作为TCP客户端,它可以主动发起连接请求,发送数据...
对于更复杂的代理类型(如SOCKS),可能需要第三方库来实现。 通过`sampleProxySocket`这个文件名,我们可以推测这是一个包含C#代码示例的压缩包,用于演示如何在实际项目中设置和使用代理Socket。如果你手头有这个...
- **创建Socket**:通过调用`socket()`函数创建一个Socket,该函数需要三个参数:协议族、类型、协议。 ```c int sock = socket(AF_INET, SOCK_STREAM, 0); ``` - **绑定地址**:使用`bind()`函数将Socket与本地...
在计算机科学中,Socket编程是一种通信机制,它允许两个网络应用程序之间进行数据交换。在这个特定的案例中,我们将探讨如何利用Socket编程来实现一个简单的功能:计算三角形的面积。这个系统由一个服务器端和一个...
**三、Socket编程步骤** 1. **创建Socket**:在客户端,首先创建一个Socket对象,并指定服务器的IP地址和端口号。 2. **连接服务器**:客户端的Socket通过connect()方法连接到服务器的Socket。 3. **服务器监听**:...