CN108989480A - 一种在服务器获取客户端地址的方法 - Google Patents
一种在服务器获取客户端地址的方法 Download PDFInfo
- Publication number
- CN108989480A CN108989480A CN201810830753.3A CN201810830753A CN108989480A CN 108989480 A CN108989480 A CN 108989480A CN 201810830753 A CN201810830753 A CN 201810830753A CN 108989480 A CN108989480 A CN 108989480A
- Authority
- CN
- China
- Prior art keywords
- address
- server
- wfp
- client
- network monitoring
- 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.)
- Pending
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
- H04L61/255—Maintenance or indexing of mapping tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/163—In-band adaptation of TCP data exchange; In-band control procedures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Abstract
本发明公开了一种在服务器获取客户端地址的方法,包括以下步骤:a)NAT设备进行在转发报文,在NAT设备与服务器建立连接的ACK报文的TCP选项中添加类型为TCPOPT_SA的选项。b)服务器实现基于WFP的网络监控类型驱动,WFP的网络监控类型驱动截获建立TCP连接的ACK报文,WFP的网络监控类型驱动解析ACK报文并从其中解析出客户端的真实IP,WFP的网络监控类型驱动将客户端的真实IP信息插入到哈希表中。c)SPI从WFP的网络监控类型驱动中查询到相应的socket的真实地址,并返回真实地址给用户。该方法在Windows服务器上运行的应用程序可以获取到客户端的真实IP地址,为运行在Windows平台下的服务器应用程序提供了实现基于客户端信息服务功能的可能性。
Description
技术领域
本发明涉及一种在服务器获取客户端地址的方法。
背景技术
当客户端通过NAT设备访问服务器的时候,NAT设备接收发自客户端的报文并将此报文转发给服务器。在这个过程中,NAT设备会将报文的源IP地址和端口改成自己的IP地址端口,服务端应用程序获取到远端地址是的是NAT设备的IP地址。即服务端无法获取经过NAT设备转发后的数据包的真实源IP地址,即数据包的来源IP地址;同时基于TCP协议的服务端应用程序无法获取经过NAT设备转发后的数据包的真实源IP地址;
本发明主要是解决在经过NAT设备访问服务器的场景下,服务端应用程序如何获取客户端真实IP地址的问题。
发明内容
本发明的目的在于现有技术的不足,提供一种在服务器获取客户端地址的方法。
为了解决上述技术问题,采用如下技术方案:
一种在服务器获取客户端地址的方法,包括以下步骤:
a)NAT设备进行在转发报文,在NAT设备与服务器建立连接的ACK报文的TCP选项中添加类型为TCPOPT_SA的选项。
b)服务器实现基于WFP的网络监控类型驱动,WFP的网络监控类型驱动截获建立TCP连接的ACK报文,WFP的网络监控类型驱动解析ACK报文并从其中解析出客户端的真实IP,WFP的网络监控类型驱动将客户端的真实IP信息插入到哈希表中。
c)SPI从WFP的网络监控类型驱动中查询到相应的socket的真实地址,并返回真实地址给用户。
进一步,在步骤(a)中,TCPOPT_SA的选项中包含客户端的真实IP地址和端口。
进一步,在步骤(b)中,WFP的网络监控类型驱动程序注册处理函数,处理函数为FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4/FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6。
进一步,在步骤(b)中,处理函数的参数中包含有从客户端连接服务器的ACK报文。
进一步,在步骤(b)中,检查ACK报文的TCP选项是否包含TCPOPT_SA,如果存在,从TCPOPT_SA选项中解析出真实IP地址和端口信息,并将真实IP和端口保存到哈希表中。
进一步,在步骤(c)中,服务器通过Winsock SPI截取技术实现对getpeername的hook,当应用程序调用getpeername api获取远端IP地址和端口时,钩子函数getpeername_sa将被调用,getpeername_sa从驱动的哈希表中查询socket对应的流信息。
进一步,在步骤(c)中,如果从哈希表中查询到IP地址和端口,则将IP地址和端口返回给应用程序,否则,getpeername_sa调用系统原有实现。
由于采用上述技术方案,具有以下有益效果:
本发明为一种在服务器获取客户端地址的方法,本发明在Windows下实现了获取客户端真实地址的整套方案,该方法在Windows服务器上运行的应用程序可以获取到客户端的真实IP地址,为运行在Windows平台下的服务器应用程序提供了实现基于客户端信息服务功能的可能性。
附图说明
下面结合附图对本发明作进一步说明:
图1为本发明中一种在服务器获取客户端地址的方法的流程示意图;
图2为本发明中WFP的网络监控类型驱动截获并解析ACK报文的工作示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参看图1,一种在服务器获取客户端地址的方法,包括以下步骤:
a)NAT设备进行在转发报文,在NAT设备与服务器建立连接的ACK报文的TCP选项中添加类型为TCPOPT_SA的选项,TCPOPT_SA的选项中包含客户端的真实IP地址和端口。
b)服务器实现基于WFP的网络监控类型驱动,WFP的网络监控类型驱动改变任何网络报文的行为。WFP的网络监控类型驱动截获建立TCP连接的ACK报文,WFP的网络监控类型驱动解析ACK报文并从其中解析出客户端的真实IP。WFP的网络监控类型驱动程序注册处理函数,处理函数为FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4/FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6。处理函数的参数中包含有从客户端连接服务器的ACK报文,处理函数的参数中包含有从客户端连接服务器的ACK报文,检查ACK报文的TCP选项是否包含TCPOPT_SA,如果存在,从TCPOPT_SA选项中解析出真实IP地址和端口信息,并将真实IP和端口保存到哈希表中。
具体参看图2,WFP(Windows Filter Platform)是为网络过滤应用开发平台提供支持的API和系统服务的集合。WFP允许开发者编写代码和操作系统的网络协议栈交互。网络数据可以在到达目的地之前被过滤和修改。
Filter Engine是WFP的核心。Callout扩展了Filter Engine的功能,它由一系列callout函数和一个用以唯一标识该callout的GUID KEY值组成。而一个callout内核驱动程序要实现若干个这样的callout并向Filter Engine注册这些callout。
FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4/FWPM_LAYER_ALE_FLOW_ESTABLISH ED_V6就是Callout的其中一个注册点。
d)SPI从WFP的网络监控类型驱动中查询到相应的socket的真实地址,并返回真实地址给用户。
在步骤(d)中,服务器通过Winsock SPI截取技术实现对getpeername的hook,当应用程序调用getpeername api获取远端IP地址和端口时,钩子函数getpeername_sa将被调用,getpeername_sa从驱动的哈希表中查询socket对应的流信息。在步骤(d)中,如果从哈希表中查询到IP地址和端口,则将IP地址和端口返回给应用程序,否则,getpeername_sa调用系统原有实现。
术语解释:
TCP:Transmission Control Protocol传输控制协议,一种面向连接的、可靠的、基于字节流的传输层通信协议。
WFP(Windows Filter Platform)是为网络过滤应用开发平台提供支持的API和系统服务的集合。WFP允许开发者编写代码和操作系统的网络协议栈交互。网络数据可以在到达目的地之前被过滤和修改。
Windows Filtering Platform,用于在Windows平台上创建网络过滤程序提供的一套API和系统服务。
ACK报文,指TCP协议中握手过程中用于确认已经收到某个报文的报文。
Winsock SPI:Winsock Service Provider Interface,Winsock服务提供者。
Hook:钩子。
以上仅为本发明的具体实施例,但本发明的技术特征并不局限于此。任何以本发明为基础,为解决基本相同的技术问题,实现基本相同的技术效果,所作出地简单变化、等同替换或者修饰等,皆涵盖于本发明的保护范围之中。
Claims (7)
1.一种在服务器获取客户端地址的方法,其特征在于,包括以下步骤:
a)NAT设备进行在转发报文,在NAT设备与服务器建立连接的ACK报文的TCP选项中添加类型为TCPOPT_SA的选项;
b)所述服务器实现基于WFP的网络监控类型驱动,所述WFP的网络监控类型驱动截获建立TCP连接的ACK报文,所述WFP的网络监控类型驱动解析ACK报文并从其中解析出客户端的真实IP,所述WFP的网络监控类型驱动将客户端的真实IP信息插入到哈希表中;
c)SPI从所述WFP的网络监控类型驱动中查询到相应的socket的真实地址,并返回真实地址给用户。
2.根据权利要求1所述的一种在服务器获取客户端地址的方法,其特征在于:在所述步骤(a)中,所述TCPOPT_SA的选项中包含客户端的真实IP地址和端口。
3.根据权利要求1所述的一种在服务器获取客户端地址的方法,其特征在于:在所述步骤(b)中,所述WFP的网络监控类型驱动程序注册处理函数,所述处理函数为
FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4/FWPM_LAYER_ALE_FLOW_ESTABLISH ED_V6。
4.根据权利要求3所述的一种在服务器获取客户端地址的方法,其特征在于:在所述步骤(b)中,所述处理函数的参数中包含有从客户端连接服务器的ACK报文。
5.根据权利要求4所述的一种在服务器获取客户端地址的方法,其特征在于:在所述步骤(b)中,检查ACK报文的TCP选项是否包含TCPOPT_SA,如果存在,从TCPOPT_SA选项中解析出真实IP地址和端口信息,并将真实IP和端口保存到哈希表中。
6.根据权利要求1所述的一种在服务器获取客户端地址的方法,其特征在于:在所述步骤(c)中,所述服务器通过Winsock SPI截取技术实现对getpeername的hook,当应用程序调用getpeername api获取远端IP地址和端口时,钩子函数getpeername_sa将被调用,getpeername_sa从驱动的哈希表中查询socket对应的流信息。
7.根据权利要求6所述的一种在服务器获取客户端地址的方法,其特征在于:在所述步骤(c)中,如果从哈希表中查询到IP地址和端口,则将IP地址和端口返回给应用程序,否则,getpeername_sa调用系统原有实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810830753.3A CN108989480A (zh) | 2018-07-26 | 2018-07-26 | 一种在服务器获取客户端地址的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810830753.3A CN108989480A (zh) | 2018-07-26 | 2018-07-26 | 一种在服务器获取客户端地址的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108989480A true CN108989480A (zh) | 2018-12-11 |
Family
ID=64551455
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810830753.3A Pending CN108989480A (zh) | 2018-07-26 | 2018-07-26 | 一种在服务器获取客户端地址的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108989480A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110798542A (zh) * | 2019-10-28 | 2020-02-14 | 北京奇艺世纪科技有限公司 | 一种获取ip地址的方法及系统 |
CN113098727A (zh) * | 2019-12-23 | 2021-07-09 | 上海云盾信息技术有限公司 | 一种数据包检测处理方法与设备 |
CN115037551A (zh) * | 2022-06-29 | 2022-09-09 | 北京奇艺世纪科技有限公司 | 连接权限控制方法、装置、电子设备及存储介质 |
CN115242888A (zh) * | 2021-04-02 | 2022-10-25 | 深圳市锐速云计算有限公司 | 四层tcp/udp协议转发真实ip方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144290A1 (en) * | 2003-08-01 | 2005-06-30 | Rizwan Mallal | Arbitrary java logic deployed transparently in a network |
CN103297407A (zh) * | 2012-03-02 | 2013-09-11 | 百度在线网络技术(北京)有限公司 | 传递客户端IPv6地址及端口至后端服务器的方法及装置 |
CN103297552A (zh) * | 2012-03-02 | 2013-09-11 | 百度在线网络技术(北京)有限公司 | 传递客户端IPv4地址及端口至后端服务器的方法及装置 |
CN103428044A (zh) * | 2012-05-24 | 2013-12-04 | 中国移动通信集团贵州有限公司 | 一种数据包监听方法、装置和系统 |
CN105554065A (zh) * | 2015-12-03 | 2016-05-04 | 华为技术有限公司 | 处理报文的方法、转换单元和应用单元 |
CN107465666A (zh) * | 2017-07-12 | 2017-12-12 | 北京潘达互娱科技有限公司 | 一种客户端ip获取方法与装置 |
-
2018
- 2018-07-26 CN CN201810830753.3A patent/CN108989480A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144290A1 (en) * | 2003-08-01 | 2005-06-30 | Rizwan Mallal | Arbitrary java logic deployed transparently in a network |
CN103297407A (zh) * | 2012-03-02 | 2013-09-11 | 百度在线网络技术(北京)有限公司 | 传递客户端IPv6地址及端口至后端服务器的方法及装置 |
CN103297552A (zh) * | 2012-03-02 | 2013-09-11 | 百度在线网络技术(北京)有限公司 | 传递客户端IPv4地址及端口至后端服务器的方法及装置 |
CN103428044A (zh) * | 2012-05-24 | 2013-12-04 | 中国移动通信集团贵州有限公司 | 一种数据包监听方法、装置和系统 |
CN105554065A (zh) * | 2015-12-03 | 2016-05-04 | 华为技术有限公司 | 处理报文的方法、转换单元和应用单元 |
CN107465666A (zh) * | 2017-07-12 | 2017-12-12 | 北京潘达互娱科技有限公司 | 一种客户端ip获取方法与装置 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110798542A (zh) * | 2019-10-28 | 2020-02-14 | 北京奇艺世纪科技有限公司 | 一种获取ip地址的方法及系统 |
CN113098727A (zh) * | 2019-12-23 | 2021-07-09 | 上海云盾信息技术有限公司 | 一种数据包检测处理方法与设备 |
CN115242888A (zh) * | 2021-04-02 | 2022-10-25 | 深圳市锐速云计算有限公司 | 四层tcp/udp协议转发真实ip方法及系统 |
CN115037551A (zh) * | 2022-06-29 | 2022-09-09 | 北京奇艺世纪科技有限公司 | 连接权限控制方法、装置、电子设备及存储介质 |
CN115037551B (zh) * | 2022-06-29 | 2024-04-26 | 北京奇艺世纪科技有限公司 | 连接权限控制方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8332532B2 (en) | Connectivity over stateful firewalls | |
CN108989480A (zh) | 一种在服务器获取客户端地址的方法 | |
EP3422656B1 (en) | Udp protocol acceleration method and system | |
CN104580192A (zh) | 应用程序的网络访问请求的处理方法和装置 | |
KR20070053367A (ko) | 패킷 플로우에 따라 세션 서비스를 적용하는 시스템 및방법 | |
CN102932461B (zh) | 网络加速传输方法及装置 | |
CN104486327B (zh) | 页面与长连接服务器间的通信方法及客户端 | |
US7249191B1 (en) | Transparent bridge that terminates TCP connections | |
CN102546407B (zh) | 报文发送方法及装置 | |
US11455160B1 (en) | Simultaneous operation of a networked device using multiple disparate networks | |
US20110047261A1 (en) | Information communication apparatus, information communication method, and program | |
CN102946387A (zh) | 一种防御拒接服务攻击的方法 | |
WO2014101661A1 (zh) | 业务流镜像方法及镜像设备 | |
CN108023736A (zh) | 通信方法、服务端设备、客户端设备、装置及系统 | |
US7564848B2 (en) | Method for the establishing of connections in a communication system | |
WO2020206849A1 (zh) | 一种处理带vlan tag的dhcp数据的方法及系统 | |
CN103001966B (zh) | 一种私网ip的处理、识别方法及装置 | |
CN107528923A (zh) | 一种网络适配器的数据传输方法及网络适配器 | |
US11055166B2 (en) | Covertly storing a payload of data within a network | |
CN114465744A (zh) | 一种安全访问方法及网络防火墙系统 | |
JP2013126219A (ja) | 転送サーバおよび転送プログラム | |
CN103905302A (zh) | 一种在使用虚拟网卡的Windows主机上绑定源IP的方法 | |
US20090052446A1 (en) | Communications Interface | |
CN111343103B (zh) | 一种安全组规则不能立即生效问题的解决方法 | |
CN112333072B (zh) | 一种物联网增强Non-IP数据传输方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181211 |
|
RJ01 | Rejection of invention patent application after publication |