CN101043527A - 使应用程序独占端口的方法和模块 - Google Patents
使应用程序独占端口的方法和模块 Download PDFInfo
- Publication number
- CN101043527A CN101043527A CN 200610064992 CN200610064992A CN101043527A CN 101043527 A CN101043527 A CN 101043527A CN 200610064992 CN200610064992 CN 200610064992 CN 200610064992 A CN200610064992 A CN 200610064992A CN 101043527 A CN101043527 A CN 101043527A
- Authority
- CN
- China
- Prior art keywords
- application program
- port
- transmission
- request
- bind request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明公开一种使应用程序独占端口的方法和模块。映射关系建立单元建立保留端口和使用相应端口的应用程序之间的映射。在传输服务提供单元中,保留端口判断部件收到应用程序的端口绑定请求时查找映射关系建立单元所建立的映射,并根据请求绑定的端口是否为保留端口向绑定请求接受部件或应用程序判断部件传递指令;绑定请求接受部件收到指令时接受该应用程序的绑定请求;应用程序判断部件收到指令时判断提出请求的应用程序是否为与判断出的保留端口有映射关系的应用程序,并根据判断结果向绑定请求接受部件或绑定请求拒绝部件传递指令;绑定请求拒绝部件收到指令时拒绝该应用程序的绑定请求。因此,保证特定的端口只能被特定的应用程序独自占用。
Description
技术领域
本发明涉及利用网络通信技术的计算机系统,尤其涉及一种使应用程序独占端口的方法和模块。
背景技术
端口是网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。应用程序(即进程)通过系统调用与某端口建立连接后,传输层传给该端口的数据都被相应进程所接收。相应地,应用程序发给传输层的数据都通过该端口输出。
服务提供者接口(SPI,Service Provider Interface)是微软Winsock2的一个新特性。Winsock2不仅提供了一个供应用程序访问网络服务的应用程序编程接口(API),还提供了由传输服务提供者和名字解析服务提供者实现的服务提供者接口(SPI)和WS2_32.DLL。
Winsock2的体系结构图如图1所示。Winsock2的传输服务提供者是以动态链接库的形式(DLL)存在的,它通过WSPStartup函数为上层函数调用提供接口,而其他的函数则是通过函数指针表的方式来访问。传输服务提供者的动态链接库只有在应用程序需要时才由WS2_32.DLL载入内存中的,在不需要时则会被自动卸载。
WS2_32.DLL的主要功能是充当应用程序和传输服务提供者之间的媒介。每个应用程序都必须通过WS2_32.DLL和相应的传输服务提供者进行严格的数据交换。WS2_32.DLL根据应用程序在创建套接字时所提供的参数来选择特定的传输服务提供者,参数包括地址族、套接字类型和协议类型,上述三个因素就决定了应用程序使用的传输服务提供者。WS2_32.DLL在系统中寻找第一个和上述三个因素相匹配的传输服务提供者,然后调用其对应的WSPStartup函数,完成应用程序和传输服务提供者的关联。然后应用程序所有的通信请求都由WS2_32.DLL转交给传输服务提供者来处理。
SPI支持三种协议:分层协议、基础协议和协议链。分层协议在基础协议的上层,不能独立工作,只能依靠底层的基础协议实现更高级的通信服务。基础协议是相对分层协议而言的,它是指能够独立、安全地和远程端点实现数据通信的协议。协议链是将一系列的分层协议和基础协议按一定的顺序连接在一起的链状结构。SPI的协议结构如图2所示。
系统通过WSAPROTOCOL_INFOW结构中ProtocolChain成员的ChainLen值区分基础协议、分层协议和协议链。分层协议的值为0,基础协议的值为1,而协议链的值是大于1。
在传输服务提供者的实现方式中分层协议和基础协议几乎是相同的,它们的不同之处在于安装。基础协议能够独立地实现与远程终端的数据交换,安装时不需要指定协议链。相对于基础协议来说,分层协议是不能独立工作的,它们必须依赖底层的基础协议进行数据交换,因此在安装分层协议的时候,必须安装相应的协议链,为其指定相应的基础协议。协议链是由一系列分层协议和基础协议构成的链状结构,协议链中的第一个协议通常是一个分层协议,协议链中的最后一个协议通常是一个基础协议。
发明内容
本发明提供一种利用SPI技术实现传输服务提供者以使应用程序独占端口的方法和模块。
一方面,提出一种使应用程序独占端口的方法。该方法包括以下步骤:
A、建立各个保留端口和使用相应端口的应用程序之间的映射关系;
B、收到应用程序提出的端口绑定请求时,传输服务提供者通过查找所建立的映射关系来判断请求绑定的端口是否为保留端口;
C、如果不是保留端口,则接受该绑定请求;
D、如果是保留端口,则判断提出请求的应用程序是否为与相应的保留端口有映射关系的应用程序,如果是则接受绑定请求,否则拒绝该应用程序的绑定请求。
上述传输服务提供者动态加载了下一个传输服务提供者。
上述接受绑定请求进一步包括:该传输服务提供者将该绑定请求传递到所加载的下一个传输服务提供者。
上述拒绝绑定请求进一步包括:该传输服务提供者向该应用程序返回表示发生错误的参数。
上述传输服务提供者排序在所有传输服务提供者的前面。
另一方面,提出一种使应用程序独占端口的模块。该模块包括映射关系建立单元和传输服务提供单元,其中:
所述映射关系建立单元,用于建立各个保留端口和使用相应端口的应用程序之间的映射关系;
所述传输服务提供单元进一步包括:保留端口判断部件,用于收到应用程序提出的端口绑定请求时查找映射关系建立单元所建立的映射关系,并根据请求绑定的端口是否为保留端口向绑定请求接受部件或应用程序判断部件传递指令;绑定请求接受部件,用于收到指令时接受该应用程序的绑定请求;应用程序判断部件,用于收到保留端口判断部件的指令时判断提出请求的应用程序是否为与判断出的保留端口有映射关系的应用程序,并根据判断结果向绑定请求接受部件或绑定请求拒绝部件传递指令;绑定请求拒绝部件,用于收到指令时拒绝该应用程序的绑定请求。
上述传输服务提供单元动态链接着下一个传输服务提供单元。
上述绑定请求接受部件进一步用于将该绑定请求传递到所链接的下一个传输服务提供单元。
上述绑定请求拒绝部件进一步用于向该应用程序返回表示发生错误的参数。
上述传输服务提供单元在所有传输服务提供单元中处于优先位置。
本发明主要的优点和特点如下:
保证特定的端口只能被特定的应用程序独自占用,尤其在多个应用程序企图占用相同端口的时候,可以确保特定的应用程序能够正常工作。
附图说明
图1是Winsock2体系结构示意图;
图2是SPI协议结构示意图;
图3是按照本发明使应用程序独占端口的系统的组成结构示意图。
具体实施方式
本发明主要是利用SPI技术实现一个传输服务提供者,并安装到系统所有传输服务提供者的最前面。当收到应用程序提出的端口绑定请求时,传输服务提供者进行如下处理:如果端口为非保留的特定端口,则传输服务提供者接受其绑定请求;如果端口为保留的特定端口,则传输服务提供者判断应用程序是否为特定的应用程序,如果是则接受其绑定请求,否则拒绝其绑定请求。
本发明的优选方法是以分层协议的形式实现基于TCP协议的传输服务提供者。该方法一个实施例的流程如下:
步骤1,建立一张保留端口的映射表,映射表包含若干表项,每一个表项都由两部分构成,分别是保留的端口号和使用上述端口的应用程序。
步骤2,实现动态链接库形式(DLL)的传输服务提供者,包括以下步骤:
步骤2.1,生成代表传输服务提供者的唯一标识符GUID,一般称为全球唯一标识Globally Unique Identifier;
步骤2.2,在传输服务提供者中实现并导出一个名为WSPStartup的函数;
步骤2.3,WSPStartup函数的实现如下:
步骤2.3.1,调用WSCEnumProtocols函数获取系统中所有传输服务提供者的信息,存储在元素类型为WSAPROTOCOL_INFO结构的数组中;
步骤2.3.2,在步骤2.3.1得到的数组中找出ProviderId成员数值与步骤2.1所生成的GUID相等的元素,并获得该元素对应的dwCatalogEntryId成员数值,dwCatalogEntryId成员数值是WS2_32.DLL为每个传输服务提供者唯一分配的标识符;
步骤2.3.3,通过步骤2.3.2得到的dwCatalogEntryId成员数值,利用协议链的ChainEntries数组获得下一个传输服务提供者的dwCatalogEntryId成员数值;
步骤2.3.4,在步骤2.3.1得到的数组中找出dwCatalogEntryId成员数值与步骤2.3.3得到的dwCatalogEntryId成员数值相等的元素,并获得该元素对应的ProviderId成员数值;
步骤2.3.5,调用WSCGetProviderPath函数,利用步骤2.3.4得到的ProviderId成员数值,获得下一个传输服务提供者的存储路径;
步骤2.3.6,调用LoadLibrary函数,利用步骤2.3.5得到的存储路径将下一个传输服务提供者载入内存。通过GetProcAddress函数得到其WSPStartup函数指针,调用下一个传输服务提供者的WSPStartup函数,获得下一个传输服务提供者的SPI函数指针列表;
步骤2.3.7,实现一个名为WSPBind的函数,并且函数原型与SPI提供的WSPBind函数原型相同,并将传输服务提供者的SPI函数指针列表中的lpWSPBind函数指针指向上述WSPBind的函数;
步骤2.4,在WSPBind函数中,获得请求绑定的端口号码,并查询步骤1建立的保留端口的映射表。如果端口号码不在映射表中,则通过步骤2.3.6得到的函数指针列表调用lpWSPBind指针对应的函数将端口绑定请求传递到下一个传输服务提供者。如果端口号码在映射表中,则判断应用程序是否为端口映射表中指定的应用程序,如果是则通过步骤2.3.6得到的函数指针列表调用lpWSPBind指针对应的函数将端口绑定请求传递到下一个传输服务提供者;否则直接返回SOCKET_ERROR,拒绝端口绑定请求。
步骤3,在系统中部署传输服务提供者,具体流程如下:
3.1调用WSCInstallProvider函数,利用步骤2.1生成的GUID,以分层协议形式安装传输服务提供者;
3.2调用WSCInstallProvider函数,重新生成一个作为协议链标识的GUID,安装协议链,目的是为步骤3.1安装的传输服务提供者指定下一个传输服务提供者,所述下一个传输服务提供者实际是以基础协议形式实现的传输服务提供者;
3.3调用WSCWriteProviderOrder函数,将步骤3.1和步骤3.2安装的传输服务提供者置于系统所有传输服务提供者的最前面。
安装完成后,本发明所述的使应用程序独占端口的方法从步骤2.3开始执行。
下面,参照图3描述本发明提出的使应用程序独占端口的模块。
该模块包括映射关系建立单元和传输服务提供单元。该映射关系建立单元用于建立各个保留端口和使用相应端口的应用程序之间的映射关系;该传输服务提供单元包括保留端口判断部件、绑定请求接受部件、应用程序判断部件和绑定请求拒绝部件。
其中,保留端口判断部件用于收到应用程序提出的端口绑定请求时查找映射关系建立单元所建立的映射关系,并根据请求绑定的端口是否为保留端口向绑定请求接受部件或应用程序判断部件传递指令;绑定请求接受部件用于收到指令时接受该应用程序的绑定请求;应用程序判断部件用于收到保留端口判断部件的指令时判断提出请求的应用程序是否为与判断出的保留端口有映射关系的应用程序,并根据判断结果向绑定请求接受部件或绑定请求拒绝部件传递指令;绑定请求拒绝部件用于收到指令时拒绝该应用程序的绑定请求。
该传输服务提供单元动态链接着下一个传输服务提供单元,该绑定请求接受模块用于将该绑定请求传递到所链接的下一个传输服务提供单元。该绑定请求拒绝模块用于向该应用程序返回SOCKET_ERROR。该传输服务提供单元在所有传输服务提供单元中处于优先位置。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1、一种使应用程序独占端口的方法,包括以下步骤:
A、建立各个保留端口和使用相应端口的应用程序之间的映射关系;
B、收到应用程序提出的端口绑定请求时,传输服务提供者通过查找所建立的映射关系来判断请求绑定的端口是否为保留端口;
C、如果不是保留端口,则接受所述绑定请求;
D、如果是保留端口,则判断所述提出请求的应用程序是否为与相应的保留端口有映射关系的应用程序,如果是则接受绑定请求,否则拒绝所述应用程序的绑定请求。
2、如权利要求1所述的方法,其特征在于所述传输服务提供者动态加载了下一个传输服务提供者。
3、如权利要求2所述的方法,其特征在于所述接受绑定请求进一步包括:所述传输服务提供者将所述绑定请求传递到所加载的下一个传输服务提供者。
4、如权利要求1所述的方法,其特征在于所述拒绝绑定请求进一步包括:所述传输服务提供者向所述应用程序返回表示发生错误的参数。
5、如权利要求1所述的方法,其特征在于所述传输服务提供者排序在所有传输服务提供者的前面。
6、一种使应用程序独占端口的模块,包括映射关系建立单元和传输服务提供单元,其中:
所述映射关系建立单元,用于建立各个保留端口和使用相应端口的应用程序之间的映射关系;
所述传输服务提供单元进一步包括:
保留端口判断部件,用于收到应用程序提出的端口绑定请求时查找映射关系建立单元所建立的映射关系,并根据请求绑定的端口是否为保留端口向绑定请求接受部件或应用程序判断部件传递指令;
绑定请求接受部件,用于收到指令时接受所述应用程序的绑定请求;
应用程序判断部件,用于收到保留端口判断部件的指令时判断提出请求的应用程序是否为与判断出的保留端口有映射关系的应用程序,并根据判断结果向绑定请求接受部件或绑定请求拒绝部件传递指令;
绑定请求拒绝部件,用于收到指令时拒绝所述应用程序的绑定请求。
7、如权利要求6所述的模块,其特征在于所述传输服务提供单元动态链接着下一个传输服务提供单元。
8、如权利要求7所述的模块,其特征在于所述绑定请求接受部件,进一步用于将所述绑定请求传递到所链接的下一个传输服务提供单元。
9、如权利要求6所述的模块,其特征在于所述绑定请求拒绝部件,进一步用于向所述应用程序返回表示发生错误的参数。
10、如权利要求6所述的模块,其特征在于所述传输服务提供单元在所有传输服务提供单元中处于优先位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200610064992XA CN100559796C (zh) | 2006-03-20 | 2006-03-20 | 使应用程序独占端口的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200610064992XA CN100559796C (zh) | 2006-03-20 | 2006-03-20 | 使应用程序独占端口的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101043527A true CN101043527A (zh) | 2007-09-26 |
CN100559796C CN100559796C (zh) | 2009-11-11 |
Family
ID=38808712
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200610064992XA Active CN100559796C (zh) | 2006-03-20 | 2006-03-20 | 使应用程序独占端口的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100559796C (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063287A (zh) * | 2013-03-22 | 2014-09-24 | 腾讯科技(深圳)有限公司 | 进程管理方法及装置 |
CN105426242A (zh) * | 2015-11-17 | 2016-03-23 | 腾讯科技(深圳)有限公司 | 数据传递方法和装置 |
-
2006
- 2006-03-20 CN CNB200610064992XA patent/CN100559796C/zh active Active
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063287A (zh) * | 2013-03-22 | 2014-09-24 | 腾讯科技(深圳)有限公司 | 进程管理方法及装置 |
CN105426242A (zh) * | 2015-11-17 | 2016-03-23 | 腾讯科技(深圳)有限公司 | 数据传递方法和装置 |
CN105426242B (zh) * | 2015-11-17 | 2020-04-21 | 腾讯科技(深圳)有限公司 | 数据传递方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100559796C (zh) | 2009-11-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1849587A (zh) | 共享处理器和网络接口的多个操作系统 | |
CN1404288A (zh) | 完成手机号码与即时通信号码捆绑和手机状态显示的方法 | |
CN1310553A (zh) | 不同类型设备的命名规约和使用该命名规约的装置和方法 | |
CN1928825A (zh) | 一种服务器的实现方法以及服务器系统 | |
CN1794653A (zh) | 一种家庭网络设备的管理系统及管理方法 | |
CN1925654A (zh) | 短信内容超长时转换为Email消息的移动终端及方法 | |
CN1842073A (zh) | 一种实现网络计算机的外部设备映射的方法 | |
CN1445962A (zh) | 家电设备网络系统及其控制方法 | |
CN101047914A (zh) | 移动通信终端的协同处理系统及其方法 | |
CN101043527A (zh) | 使应用程序独占端口的方法和模块 | |
CN1764187A (zh) | 用于在操作系统中的应用之间的套接字通信的设备和方法 | |
CN1172495C (zh) | 一种利用门户网关实现设备间互连的方法 | |
CN1556609A (zh) | 移动机器人网络化控制平台装置 | |
CN1949173A (zh) | 一种软件的安装方法及其装置 | |
CN1914887A (zh) | 至网际协议第六版通信网络设备的前缀自动分配 | |
CN1165841C (zh) | 一种自动加载打印机驱动程序的方法 | |
CN1264377C (zh) | 便携信息终端、无线通信系统及连接确立方法 | |
CN1946035A (zh) | 一种网元数据配置管理的方法及网元 | |
CN1798147A (zh) | 一种统一资源定位符的匹配方法 | |
CN1819532A (zh) | 一种管理信息库的处理方法 | |
CN1859251A (zh) | 一种实现通信单元互连的方法 | |
CN1536825A (zh) | 自动确定设备昵称、解决网络设备冗余昵称方法及网络系统 | |
CN1794735A (zh) | 基于分布式架构的软交换应用服务器系统 | |
CN1764121A (zh) | 用于星形网络的通信方法及通信终端 | |
CN1893423A (zh) | 一种基于SPI技术的服务器端应用系统IPv4/IPv6过渡方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |