CN103905302B - 一种在使用虚拟网卡的Windows主机上绑定源IP的方法 - Google Patents
一种在使用虚拟网卡的Windows主机上绑定源IP的方法 Download PDFInfo
- Publication number
- CN103905302B CN103905302B CN201210587692.5A CN201210587692A CN103905302B CN 103905302 B CN103905302 B CN 103905302B CN 201210587692 A CN201210587692 A CN 201210587692A CN 103905302 B CN103905302 B CN 103905302B
- Authority
- CN
- China
- Prior art keywords
- socket
- source
- bind
- address
- handling processes
- 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.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种在使用虚拟网卡的Windows主机上绑定源IP的方法,该方法使用Windows的LSP技术动态的截获发往虚拟网卡的数据包,将其源IP地址设定为一个非虚拟网卡的IP地址。该方法可以在不修改应用程序的情况下为数据包绑定源IP地址。
Description
技术领域
本发明涉及网络数据传输技术,具体涉及在使用虚拟网卡的Windows主机上绑定源IP的技术。
背景技术
诸如Windows这类操作系统在不作路由器使用时,其数据包发送时的行为遵循RFC1122定义的强主机模式,其具体流程如图1所示。
这种方式简化了用户的配置,通过系统中的路由表来为IP数据报选择一个源IP地址。
但强主机发送行为在和基于虚拟网卡的VPN一起使用时,会使通过VPN隧道的IP数据报丧失透明性,即远端接收主机收到的IP数据报的源IP地址将会是虚拟网卡的IP地址,要做到VPN隧道对用户数据报的透明,远端接收主机收到的IP数据报的源IP地址必须为发送端主机在不通过VPN隧道时本来应该经由的物理网卡的IP地址。
展现上述这个问题的例子有很多,例如Cisco的VTI技术、著名的开源VPN实现-OpenVPN等等。
由此可见如在不修改应用程序的情况下为数据包绑定源IP地址是本领域亟需解决的问题。
发明内容
本发明针对现有技术中使用虚拟网卡的Windows主机在发送数据包时所存在的问题,而提供一种在使用虚拟网卡的Windows主机上绑定源IP的方法。该方法可以在不修改应用程序的情况下为数据包绑定源IP地址。
为了达到上述目的,本发明采用如下的技术方案:
一种在使用虚拟网卡的Windows主机上绑定源IP的方法,所述方法使用Windows的LSP技术动态的截获发往虚拟网卡的数据包,将其源IP地址设定为一个非虚拟网卡的IP地址。
在本发明的优选实例中,所述方法通过在LSP中实现socket处理流程、bind处理流程、connect处理流程、sendto处理流程以及closesocket处理流程,以此来完成源IP的绑定;
所述socket处理流程包括如下步骤:
(1a)在LSP中创建socket;
(2a)将创建的socket关联到一个socket跟踪链表表项,该链表项用于指示一个数据包是否需要绑定一个源IP地址;
所述bind处理流程包括如下步骤:
(1b)在LSP中查询socket跟踪链表表项;
(2b)查看相应的bind地址参数是否为0;若为0,转入步骤(4b);若不为0,转入步骤(3b);
(3b)调用原生bind逻辑;
(4b)更新socket跟踪链表表项,为该socket的后续数据包指示需要绑定源IP地址;
所述connect处理流程包括如下步骤:
(1c)查询socket跟踪链表表项;
(2c)若查找到相应的表项,则调用NeedBind例程,该NeedBind例程的逻辑为判断是否需要为数据包绑定一个源IP地址;
(3c)通过调用NeedBind例程来判断数据包是否需要绑定源IP地址,若需要,则转入步骤(4c);若不需要,则转入步骤(5c);
(4c)调用LSP中实现的bind处理流程;
(5c)调用原生connect;
所述sendto处理流程包括如下步骤:
(1d)查询socket跟踪链表表项;
(2d)若查找到相应的表项,则调用NeedBind例程,该NeedBind例程的逻辑为判断是否需要为数据包绑定一个源IP地址;
(3d)通过调用NeedBind例程来判断数据包是否需要绑定源IP地址,若需要,则转入步骤(4d);若不需要,则转入步骤(5d);
(4d)调用LSP中实现的bind处理流程;
(5d)调用原生sendto;
所述closesocket处理流程包括如下步骤:
(1e)查询socket跟踪链表表项;
(2e)若查找到相应的表项,则删除该socket跟踪链表表项;
(3e)调用原生closesocket。
根据上述方案形成的技术方案能够在不修改应用程序的情况下为数据包绑定源IP地址;同时能够灵活实现源地址伪装。
附图说明
以下结合附图和具体实施方式来进一步说明本发明。
图1为现有Windows这类操作系统在不作路由器使用时数据包的发送流程图;
图2为socket处理流程的示意图;
图3为bind处理流程的示意图;
图4为connect处理流程的示意图;
图5为sendto处理流程的示意图;
图6为closesocket处理流程的示意图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本发明提供的在使用虚拟网卡的Windows主机上绑定源IP的方案使用Windows的LSP技术动态的截获发往虚拟网卡的数据包,将其源IP地址设定为一个非虚拟网卡的IP地址。
本方案中涉及的虚拟网卡:即用软件模拟网络环境。软件模拟的网络接口卡不需要硬件芯片的支持,可以将数据包导入任意地方。
涉及的LSP(Layered Service Provider):中文名为分层服务提供程序,是Windows在Socket实现中提供的一种机制,允许在应用程序的Socket调用和数据进入协议栈之间,插入一个或多个层,对Socket调用进行重载或拦截。LSP的加载不需要应用程序参与,由系统自动进行。
基于上述原理,本发明实现在使用虚拟网卡的Windows主机上绑定源IP的具体流程如下:
为了能够在不修改应用程序的情况下为IP数据报选择一个位于物理网卡上的源IP地址,首先,在Windows主机上上设定以下模块:
1、策略处理模块-为LSP设置策略,指出哪些数据包需要被拦截,拦截后进入源地址选择模块为其选择一个源地址。
2、路由查找模块-针对一个目标IP地址查询系统路由表,得到该数据包的路由表项。
3、源地址选择模块-可以根据配置自动为一个数据包绑定一个源IP地址或者手动为其指定一个明确的源IP地址。
4、数据处理模块-在数据包流经SPI的关键点上利用LSP处理数据包。
5、全局的socket跟踪链表表项-保存每一个socket的详细信息。
据此,本发明的方案通过在LSP中实现socket处理流程、bind处理流程、connect处理流程、sendto处理流程以及closesocket处理流程,以此来完成源IP的绑定。
其中,socket处理流程:在LSP实现中,创建socket的时候将socket关联到一个socket跟踪链表项,该链表项用于指示一个数据包是否需要绑定一个源IP地址。如图2所示,该处理流程的实施步骤如下:
(1a)在LSP中创建socket;
(2a)判断是否创建成功,若创建成功转至步骤(4a);若没有创建成功,转至步骤(3a);
(3a)错误返回;
(4a)分配socket跟踪链表节点并将该socket与之关联后插入socket跟踪链表;
(5a)返回socket句柄。
bind处理流程:在LSP实现中,替换原生的bind逻辑,如果应用程序调用bind的时候传入0地址参数,意味着应用程序不在意bind的地址,此时就需要LSP在后续的connect调用或者数据真的要发送的时候为其bind一个非虚拟网卡的IP地址作为数据包的源IP地址。如图3所示,该处理流程的实施步骤如下:
(1b)在LSP中查询socket跟踪链表表项;
(2b)判断是否查询到,若没有查询到,转至步骤(3b);若查询到转至步骤(4b);
(3b)错误返回;
(4b)查看相应的bind地址参数是否为0;若为0,转入步骤(4b);若不为0,转入步骤(3b);
(5b)调用原生bind逻辑;
(6b)更新socket跟踪链表表项,为该socket的后续数据包指示需要绑定源IP地址;
(7b)处理流程结束,返回。
connect处理流程:针对TCP应用或者一些UDP应用,在发送数据包之前需要connect到目标地址,在connect调用的时候可以捕获到数据包的目标,基于目标即可判断出该数据包是否被路由到虚拟网卡。如图4所示,该处理流程的实施步骤如下:
(1c)查询socket跟踪链表表项;
(2c)判断是否查询到,若没有查询到,转至步骤(3c);若查询到转至步骤(4c);
(3c)错误返回;
(4c)若查找到相应的表项,则调用NeedBind例程,该NeedBind例程的逻辑为判断是否需要为数据包绑定一个源IP地址,即判断一个socket关联的目标IP是否通过虚拟网卡被路由;
(5c)通过调用NeedBind例程来判断数据包是否需要绑定源IP地址,若需要,则转入步骤(6c);若不需要,则转入步骤(7c);
(6c)调用LSP中实现的bind处理流程;
(7c)调用原生connect。
sendto处理流程:针对一些UDP应用,不调用connect,直接调用sendto,那么在第一次调用sendto的时候即可捕获到数据的目标地址,基于目标即可判断出该数据包是否被路由到虚拟网卡。如图5所示,该处理流程的实施步骤如下:
(1d)查询socket跟踪链表表项;
(2d)判断是否查询到,若没有查询到,转至步骤(3d);若查询到转至步骤(4d);
(3d)错误返回;
(4d)若查找到相应的表项,则调用NeedBind例程,该NeedBind例程的逻辑为判断是否需要为数据包绑定一个源IP地址;
(5d)通过调用NeedBind例程来判断数据包是否需要绑定源IP地址,若需要,则转入步骤(6d);若不需要,则转入步骤(7d);
(6d)调用LSP中实现的bind处理流程;
(7d)调用原生sendto。
closesocket处理流程:在关闭socket的时候,需要将该socket对应的socket跟踪链表的表项删除之后再调用原生closesocket。如图6所示,该处理流程的实施步骤如下:
(1e)查询socket跟踪链表表项;
(2e)判断是否查询到,若没有查询到,转至步骤(3e);若查询到转至步骤(4e);
(3e)错误返回;
(4e)若查找到相应的表项,则删除该socket跟踪链表表项;
(5e)调用原生closesocket。
通过上述方案可知,本申请使用LSP技术实现上述关键逻辑即可在不修改应用程序的前提下对数据包的源IP地址进行动态设置,使之和虚拟网卡无关。这种情况下,虚拟网卡仅仅作为一个捕获数据包的逻辑网卡存在,对数据包的IP封装格式毫无影响。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (1)
1.一种在使用虚拟网卡的Windows主机上绑定源IP的方法,其特征在于,所述方法使用Windows的LSP技术动态的截获发往虚拟网卡的数据包,将其源IP地址设定为一个非虚拟网卡的IP地址;
所述方法通过在LSP中实现socket处理流程、bind处理流程、connect处理流程、sendto处理流程以及closesocket处理流程,以此来完成源IP的绑定;
所述socket处理流程包括如下步骤:
(1a)在LSP中创建socket;
(2a)将创建的socket关联到一个socket跟踪链表表项,该链表项用于指示一个数据包是否需要绑定一个源IP地址;
所述bind处理流程包括如下步骤:
(1b)在LSP中查询socket跟踪链表表项;
(2b)查看相应的bind地址参数是否为0;若为0,转入步骤(4b);若不为0,转入步骤(3b);
(3b)调用原生bind逻辑;
(4b)更新socket跟踪链表表项,为该socket的后续数据包指示需要绑定源IP地址;
所述connect处理流程包括如下步骤:
(1c)查询socket跟踪链表表项;
(2c)若查找到相应的表项,则调用NeedBind例程,该NeedBind例程的逻辑为判断是否需要为数据包绑定一个源IP地址;
(3c)通过调用NeedBind例程来判断数据包是否需要绑定源IP地址,若需要,则转入步骤(4c);若不需要,则转入步骤(5c);
(4c)调用LSP中实现的bind处理流程;
(5c)调用原生connect;
所述sendto处理流程包括如下步骤:
(1d)查询socket跟踪链表表项;
(2d)若查找到相应的表项,则调用NeedBind例程,该NeedBind例程的逻辑为判断是否需要为数据包绑定一个源IP地址;
(3d)通过调用NeedBind例程来判断数据包是否需要绑定源IP地址,若需要,则转入步骤(4d);若不需要,则转入步骤(5d);
(4d)调用LSP中实现的bind处理流程;
(5d)调用原生sendto;
所述closesocket处理流程包括如下步骤:
(1e)查询socket跟踪链表表项;
(2e)若查找到相应的表项,则删除该socket跟踪链表表项;
(3e)调用原生closesocket。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587692.5A CN103905302B (zh) | 2012-12-28 | 2012-12-28 | 一种在使用虚拟网卡的Windows主机上绑定源IP的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210587692.5A CN103905302B (zh) | 2012-12-28 | 2012-12-28 | 一种在使用虚拟网卡的Windows主机上绑定源IP的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103905302A CN103905302A (zh) | 2014-07-02 |
CN103905302B true CN103905302B (zh) | 2017-06-06 |
Family
ID=50996459
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210587692.5A Active CN103905302B (zh) | 2012-12-28 | 2012-12-28 | 一种在使用虚拟网卡的Windows主机上绑定源IP的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103905302B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104539585B (zh) * | 2014-12-05 | 2017-12-05 | 北京奇虎科技有限公司 | 浏览器防注入的方法、浏览器客户端和装置 |
CN110300045A (zh) * | 2018-03-23 | 2019-10-01 | 腾讯科技(深圳)有限公司 | 应用程序的网络加速方法、装置、设备及可读介质 |
CN112118327B (zh) * | 2020-08-04 | 2022-05-31 | 紫光云(南京)数字技术有限公司 | 一种公有云下方便快捷的修改弹性网卡ip的方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159657A (zh) * | 2007-10-16 | 2008-04-09 | 华为技术有限公司 | 一种实现私网穿越的方法、设备及服务器 |
CN101483594A (zh) * | 2009-02-11 | 2009-07-15 | 成都市华为赛门铁克科技有限公司 | 一种基于虚拟专用网隧道的报文发送方法及客户端 |
CN101964799A (zh) * | 2010-10-21 | 2011-02-02 | 神州数码网络(北京)有限公司 | 点到网隧道方式下地址冲突的解决方法 |
CN101986666A (zh) * | 2010-11-05 | 2011-03-16 | 清华大学 | 基于虚拟网络接口和反向地址转换的网络数据传输方法 |
EP2466951A1 (en) * | 2010-12-16 | 2012-06-20 | Samsung Electronics Co., Ltd. | Roaming TCP Connections Between Changing Physical Networks |
-
2012
- 2012-12-28 CN CN201210587692.5A patent/CN103905302B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101159657A (zh) * | 2007-10-16 | 2008-04-09 | 华为技术有限公司 | 一种实现私网穿越的方法、设备及服务器 |
CN101483594A (zh) * | 2009-02-11 | 2009-07-15 | 成都市华为赛门铁克科技有限公司 | 一种基于虚拟专用网隧道的报文发送方法及客户端 |
CN101964799A (zh) * | 2010-10-21 | 2011-02-02 | 神州数码网络(北京)有限公司 | 点到网隧道方式下地址冲突的解决方法 |
CN101986666A (zh) * | 2010-11-05 | 2011-03-16 | 清华大学 | 基于虚拟网络接口和反向地址转换的网络数据传输方法 |
EP2466951A1 (en) * | 2010-12-16 | 2012-06-20 | Samsung Electronics Co., Ltd. | Roaming TCP Connections Between Changing Physical Networks |
Also Published As
Publication number | Publication date |
---|---|
CN103905302A (zh) | 2014-07-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11706138B2 (en) | Distributing service function chain data and service function instance data in a network | |
CN103023942B (zh) | 一种服务器负载均衡方法、装置及系统 | |
CN103347013B (zh) | 一种增强可编程能力的OpenFlow网络系统和方法 | |
CN105306333B (zh) | 用于跨越多个网络进行服务链接的方法和控制器 | |
CN104380658B (zh) | 流分类器、业务路由触发器、报文处理的方法和系统 | |
CN104519121B (zh) | 计算机网络内的会话感知服务链 | |
CN103650436B (zh) | 业务路径分配方法、路由器和业务执行实体 | |
CN107566440A (zh) | 软件定义的网络环境中服务的自动发现和自动扩缩 | |
CN106105115A (zh) | 网络环境中由服务节点始发的服务链 | |
CN104954245B (zh) | 业务功能链处理方法及装置 | |
CN107078957A (zh) | 通信网络中的网络服务功能的链接 | |
JP2008524916A (ja) | 通信システムにおけるパケットフローに関する装置及び方法 | |
CN107409089A (zh) | 业务功能注册机制和能力索引编制 | |
CN103391296B (zh) | 一种控制器、转发器及通道建立方法和系统 | |
CN108702331A (zh) | Sr应用段与服务功能链(sfc)报头元数据的集成 | |
CN106209553A (zh) | 报文处理方法、设备及系统 | |
CN107005587A (zh) | 链接网络环境中的分布式应用的系统和方法 | |
CN102792651B (zh) | 在mac层应用服务路径路由选择的装置 | |
US20170288998A1 (en) | Apparatus for processing network packet using service function chaining and method for controlling the same | |
CN106921572A (zh) | 一种传播QoS策略的方法、装置及系统 | |
CN103905302B (zh) | 一种在使用虚拟网卡的Windows主机上绑定源IP的方法 | |
CN102970386A (zh) | 一种实现IPv6报文穿越IPv4网络的方法和设备 | |
CN106385365A (zh) | 基于开放流Openflow表实现云平台安全的方法和装置 | |
CN107509222A (zh) | 通信方法、网关设备以及计算机可读存储介质 | |
CN106100959B (zh) | 数据传输方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address |
Address after: 200436 Room 601, Lane 299, Lane 299, JIANGCHANG West Road, Jingan District, Shanghai Patentee after: Geer software Limited by Share Ltd Address before: 200070 B, 501E, 199 JIANGCHANG West Road, Zhabei District, Shanghai. Patentee before: Geer Software Co., Ltd., Shanghai |
|
CP03 | Change of name, title or address |