一种实现任意IP地址ping回复的方法
文献发布时间:2023-06-19 09:32:16
技术领域
本发明涉及计算机网络领域,尤其涉及一种实现任意IP地址ping回复的方法。
背景技术
在工作中,我们可能会有这样一种需求,想实现对任意一个IP地址或者指定的IP段(A、B、C段)中的任意一个IP地址进行ping操作,都能得到正确的ping应答。一般应用于蜜罐的蜜网环境中,用于拖延攻击者的攻击时间。如攻击者进入到一个内网环境中,一般会使用扫描器进行扫描,会扫描出可ping的主机,从而诱导攻击者尝试对可ping的主机攻击,对任意一个IP地址或者指定的IP段(A、B、C段)中的任意一个IP地址进行ping操作,都能得到正确的ping应答,就可以延缓攻击时长,就是搭建了一个可以ping通的环境。这里所说的ping的正确应答就是从进行ping操作的客户端看来,该地址是ping通了。
在ping的操作者(发起方)来看,是一个真实存在并且可达的IP地址,都应该得到正确的ping应答。因为正常来说,如果对一个不存在或者网络不通的IP地址进行ping操作,是不会有正确的ping应答。
ping是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping使用的是ICMP协议,它发送ICMP回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。
ICMP协议是通过IP协议发送的,属于网络层中的一种协议,在网络层封包后,还需要进行数据链路层的封包,最终通过物理层将包发送出去。因此,在ICMP协议的交互过程中,还需要数据链路层的ARP协议,这样才能通过MAC地址在目的端的子网中找到对应的目标机。
通常我们在实现这样的需求时,第一时间会想到通过创建一台虚拟机或容器,然后给虚拟机或容器配置上指定的IP地址,从而实现最终效果。该方式是通过创建出真实存在的IP地址,这样只要网络是通的,最终ping包是可以达到目标IP机中的。但是这种方式会存在一个问题:当需要实现的IP数量很多时,比如要实现对一个B段(6万多个IP地址),或者一个A段(1600多万个IP地址)进行ping操作都可以得到正确的ping应答时,如果还用创建真实存在的IP地址的方式来实现,那可想而知得需要多少台虚拟机或容器才能实现。虽然说一张网卡可以配很多子IP,但当网卡上的IP超过一定数量时,效率是非常低的,而且也不是一台或几台虚拟机/容器就能实现的。
现有技术至少存在以下不足:
1.现有技术通过创建一台虚拟机或容器,然后给虚拟机或容器配置上指定一个真实存在的IP地址,实现在可以互相通信的情况下,ping包可以达到目标IP机中的目的,但是对每个IP地址的ping操作都需要创建一个真实IP地址,需要多台虚拟机,实现困难。
发明内容
为解决现有技术中存在的技术问题,本发明提供了一种实现任意IP地址ping回复的方法,该方法基于Open vSwitch和SDN的技术实现了对任意地址ping操作回复应答。该方法安装SDN控制器RYU,对指定IP段ARP和ICMP请求回复应答,采用该方法只需要一台可以安装Open vSwitch的Linux虚拟机即可,然后通过编写SDN控制器RYU代码,实现对指定IP段流量包(ARP/ICMP)的请求回复应答,而且SDN控制器RYU中的流表规则可以动态修改(增删)的,IP地址段的扩展非常方便。
Open vSwitch是一个高质量的多层虚拟交换机,它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow、sFlow SPAN、RSPAN、CLI、LACP和802.1ag)。此外,它被设计为支持跨越多个物理服务器的分布式环境。Open vSwitch是一个虚拟交换软件,主要用于虚拟机环境,作为一个虚拟交换机,支持Xen/XenServer,KVM以及virtualBox多种虚拟化技术。在这种虚拟化的环境中,一个虚拟交换机主要有两个作用:传递虚拟机之间的流量,以及实现虚拟机和外界网络的通信。
Open vSwitch内核模块实现了多个“数据路径”,每个都可以有多个“vports”(类似于桥内的端口)。每个数据路径也通过关联流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。
ovs-vswitchd是Open vSwitch(OVS)的守护进程,OVS的核心部件,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换(flow-based switching)。它和上层controller通信遵从OPENFLOW协议,它与ovsdb-server通信使用OVSDB协议,它和内核模块通过netlink通信,它支持多个独立的datapath(网桥)。
正常Linux网络数据包入栈流向简化图如附图1所示,从物理网卡接收到数据包后,有Linux内核中的TCP/IP协议进行解析,最终到达用户层APP。
安装了Open vSwitch虚拟交换机后,Linux网络数据包入栈流向简化图如附图2所示,从物理网卡接收到数据包后,Open vSwitch虚拟交换机的内核模块会先查找内核缓存中是否存在匹配的流表规则,如果没有,则调用用户层的ovs-vswitchd查询流表规则,如果也没有对应的流表规则,则会请求OpenvSwitch虚拟交换机的Controller控制器进行处理,最终按照查找到的流表规则进行处理。
本发明提供了一种实现任意IP地址ping回复的方法,应用于一台装有OpenvSwitch和SDN控制器RYU的Linux虚拟机,包括如下步骤:
配置步骤,包括:
在Open vSwitch虚拟交换机上创建一个bridge虚拟网桥s1;
在创建的所述bridge虚拟网桥s1中加入虚拟机物理网卡eth0;
进行虚拟机物理网卡eth0或路由配置,使虚拟机能接收到所有经过它的数据流;
编写RYU控制模块代码,配置流表规则,所述流表规则规定对指定IP段的ARP请求或ICMP请求下发回复ARP应答包或回复ICMP应答包的流表规则,对其他数据包下发drop数据包的流表规则;
启动SDN控制器RYU,并将OpenvSwitch虚拟交换机的Controller控制器指定为所述SDN控制器RYU;
ping回复步骤,
Open vSwitch虚拟交换机内核模块从物理网卡eth0接收新数据包,并根据对应所述新数据包的流表规则进行相应处理。
优选地,在配置步骤中,将虚拟机物理网卡eth0设置为混杂模式,使虚拟机物理网卡eth0能接收到所有经过它的数据流,而不论数据流目的地址是否是所述虚拟机。
优选地,在配置步骤中,将执行ping操作的客户端的默认网关指向装有OpenvSwitch和SDN控制器RYU的虚拟机,使所述虚拟机能接收到所有经过它的数据流,而不论数据流目的地址是否是所述虚拟机。
优选地,所述ping回复步骤具体包括:
Open vSwitch虚拟交换机内核模块从物理网卡eth0接收新数据包;
Open vSwitch虚拟机内核模块匹配缓存中的流表规则,
如果匹配到,
Open vSwitch虚拟机内核模块根据匹配的流表规则处理新数据包;
如果没有匹配到,
Open vSwitch虚拟机内核模块通过netlink方式与Open vSwitch用户层ovs-vswitchd通信请求下发流表规则;
如果ovs-vswitchd中有对应的流表规则,
ovs-vswitchd下发流表规则到Open vSwitch虚拟机内核模块,Open vSwitch虚拟机内核模块接收流表规则并进行存储;
Open vSwitch虚拟机内核模块根据接收到的流表规则对新数据包进行处理;
如果ovs-vswitchd中没有对应的流表规则,
将新数据包转发SDN控制器RYU;
SDN控制器RYU根据新数据包的信息及配置的流表规则,向Open vSwitch虚拟机内核模块下发不同的流表规则,Open vSwitch虚拟机内核模块接收流表规则并进行存储;
Open vSwitch虚拟机内核模块根据接收到的流表规则对新数据包进行处理。
优选地,SDN控制器RYU根据新数据包的信息及配置的流表规则,向Open vSwitch虚拟机内核模块下发不同的流表规则,具体包括:
SDN控制器RYU在收到新数据包后,对新数据包进行拆包;
根据拆分后的数据包判断所述新数据包是否为ARP请求或ICMP请求数据包,
如果接收的新数据包是ARP请求或ICMP请求数据包,
SDN控制器RYU判断接收的新数据包目的IP地址是否为指定IP段,
如果接收的新数据包目的IP地址是指定IP段,
则SDN控制器RYU向Open vSwitch虚拟机内核模块下发回复ARP应答数据包或回复ICMP应答数据包的流表规则;
如果接收的新数据包目的IP地址不是指定IP段,
则SDN控制器RYU向Open vSwitch虚拟机内核模块下发drop数据包的流表规则。
如果接收的新数据包不是ARP请求和ICMP请求数据包,
则SDN控制器RYU向Open vSwitch虚拟机内核模块下发drop数据包的流表规则。
优选地,SDN控制器RYU根据编写的RYU控制模块代码中指定的IP段,判断新数据包中目的IP地址是否为指定IP段。
优选地,Open vSwitch虚拟机内核模块根据流表规则中的action指示处理新数据包。
优选地,所述指定IP段可在SDN控制器RYU编写的代码中进行修改。
优选地,当未指定IP段时,Open vSwitch虚拟机内核模快对任意IP地址的ARP和ICMP包回复应答。
优选地,所述在Open vSwitch虚拟网桥中加入虚拟机物理网卡eth0,具体操作如下:
在Open vSwitch虚拟交换机上使用命令“ovs-vsctl add-br s1”创建一个bridge虚拟网桥s1;
在创建的所述bridge虚拟网桥s1中使用命令“ovs-vsctl add-port s1 eth0”加入虚拟机物理网卡eth0。
与现有技术相对比,本发明的有益效果如下:
(1)本发明基于Open vSwitch和SDN技术实现了单台Linux虚拟机可以对任意地址ping回复应答的功能。
(2)本发明通过在虚拟机安装SDN控制器RYU,在SDN控制器RYU编写代码对指定IP段回复ARP应答和ICMP应答,指定的IP段可以动态修改(增删),IP地址段的扩展非常方便。
附图说明
图1是正常Linux网络数据包入栈流向示意图;
图2是安装了Open vSwitch后Linux网络数据包入栈流向示意图;
图3是本发明方法中对数据包的处理流程图;
图4是本发明实现的功能示意图。
具体实施方式
下面结合附图1-4,对本发明的具体实施方式作详细的说明。
本发明提供了一种实现任意IP地址ping回复的方法,应用于一台装有OpenvSwitch和SDN控制器RYU的Linux虚拟机,包括如下步骤:
配置步骤,包括:
在Open vSwitch虚拟交换机上创建一个bridge虚拟网桥s1;
在创建的所述bridge虚拟网桥s1中加入虚拟机物理网卡eth0;
进行虚拟机物理网卡eth0或路由配置,使虚拟机能接收到所有经过它的数据流;
编写RYU控制模块代码,配置流表规则,所述流表规则规定对指定IP段的ARP请求或ICMP请求下发回复ARP应答包或回复ICMP应答包的流表规则,对其他数据包下
发drop数据包的流表规则;
启动SDN控制器RYU,并将OpenvSwitch虚拟交换机的Controller控制器指定为所述SDN控制器RYU;
ping回复步骤,
Open vSwitch虚拟交换机内核模块从物理网卡eth0接收新数据包,并根据对应所述新数据包的流表规则进行相应处理。
作为优选实施方式,在配置步骤中,将虚拟机物理网卡eth0设置为混杂模式,使虚拟机物理网卡eth0能接收到所有经过它的数据流,而不论数据流目的地址是否是所述虚拟机。
作为优选实施方式,在配置步骤中,将执行ping操作的客户端的默认网关指向装有Open vSwitch和SDN控制器RYU的虚拟机,使所述虚拟机能接收到所有经过它的数据流,而不论数据流目的地址是否是所述虚拟机。
作为优选实施方式,所述ping回复步骤具体包括:
Open vSwitch虚拟交换机内核模块从物理网卡eth0接收新数据包;
Open vSwitch虚拟机内核模块匹配缓存中的流表规则,
如果匹配到,
Open vSwitch虚拟机内核模块根据匹配的流表规则处理新数据包;
如果没有匹配到,
Open vSwitch虚拟机内核模块通过netlink方式与Open vSwitch用户层ovs-vswitchd通信请求下发流表规则;
如果ovs-vswitchd中有对应的流表规则,
ovs-vswitchd下发流表规则到Open vSwitch虚拟机内核模块,Open vSwitch虚拟机内核模块接收流表规则并进行存储;
Open vSwitch虚拟机内核模块根据接收到的流表规则对新数据包进行处理;
如果ovs-vswitchd中没有对应的流表规则,
将新数据包转发SDN控制器RYU;
SDN控制器RYU根据新数据包的信息及配置的流表规则,向Open vSwitch虚拟机内核模块下发不同的流表规则,Open vSwitch虚拟机内核模块接收流表规则并进行存储;
Open vSwitch虚拟机内核模块根据接收到的流表规则对新数据包进行处理。
作为优选实施方式,SDN控制器RYU根据新数据包的信息及配置的流表规则,向Open vSwitch虚拟机内核模块下发不同的流表规则,具体包括:
SDN控制器RYU在收到新数据包后,对新数据包进行拆包;
根据拆分后的数据包判断所述新数据包是否为ARP请求或ICMP请求数据包,
如果接收的新数据包是ARP请求或ICMP请求数据包,
SDN控制器RYU判断接收的新数据包目的IP地址是否为指定IP段,
如果接收的新数据包目的IP地址是指定IP段,
则SDN控制器RYU向Open vSwitch虚拟机内核模块下发回复ARP
应答数据包或回复ICMP应答数据包的流表规则;
如果接收的新数据包目的IP地址不是指定IP段,
则SDN控制器RYU向Open vSwitch虚拟机内核模块下发drop数据包的流表规则。
如果接收的新数据包不是ARP请求和ICMP请求数据包,
则SDN控制器RYU向Open vSwitch虚拟机内核模块下发drop数据包的流表规则。
作为优选实施方式,SDN控制器RYU根据编写的RYU控制模块代码中指定的IP段,判断新数据包中目的IP地址是否为指定IP段。
作为优选实施方式,Open vSwitch虚拟机内核模块根据流表规则中的action指示处理新数据包。
作为优选实施方式,所述指定IP段可在SDN控制器RYU编写的代码中进行修改。
作为优选实施方式,当未指定IP段时,Open vSwitch虚拟机内核模快对任意IP地址的ARP和ICMP包回复应答。
作为优选实施方式,所述在Open vSwitch虚拟网桥中加入虚拟机物理网卡eth0,具体操作如下:
在Open vSwitch虚拟交换机上使用命令“ovs-vsctl add-br s1”创建一个bridge虚拟网桥s1;
在创建的所述bridge虚拟网桥s1中使用命令“ovs-vsctl add-port s1 eth0”加入虚拟机物理网卡eth0。
实施例1
根据本发明的一个具体实施方案,以只想实现对192.168.0.0/16段内的所有IP地址都有ping回复为例,其中RYU编写的流表规则中,指定192.168.0.0/16这一IP段,对这一指定IP段的ARP请求和ICMP请求回复ARP和ICMP应答包,下面对本发明进行详细说明。
本发明提供了一种实现任意IP地址ping回复的方法,应用于一台装有OpenvSwitch和SDN控制器RYU的Linux虚拟机,包括如下步骤:
配置步骤,包括:
在Open vSwitch虚拟交换机上使用命令“ovs-vsctl add-br s1”创建一个bridge虚拟网桥s1;
在创建的所述bridge虚拟网桥s1中使用命令“ovs-vsctl add-port s1 eth0”加入虚拟机物理网卡eth0;
进行虚拟机物理网卡eth0或路由配置,使虚拟机能接收到所有经过它的数据流;
将虚拟机物理网卡eth0设置为混杂模式,使虚拟机物理网卡eth0能接收到所有经过它的数据流,而不论数据流目的地址是否是所述虚拟机;或者将执行ping操作的客户端的默认网关指向装有Open vSwitch和SDN控制器RYU的虚拟机,使所述虚拟机能接收到所有经过它的数据流,而不论数据流目的地址是否是所述虚拟机。
编写RYU控制模块代码,配置流表规则,所述流表规则规定对指定IP段的ARP请求或ICMP请求下发回复ARP应答包或回复ICMP应答包的流表规则,对其他数据包下发drop数据包的流表规则;其中,指定IP段为192.168.0.0/16段。所述指定IP段可在SDN控制器RYU编写的代码中进行修改。
当未指定IP段时,Open vSwitch虚拟机内核模快对任意IP地址的ARP和ICMP包回复应答。
启动SDN控制器RYU,并将OpenvSwitch虚拟交换机的Controller控制器指定为所述SDN控制器RYU;
ping回复步骤,
Open vSwitch虚拟交换机内核模块从物理网卡eth0接收一个目的IP地址为192.168.0.5/16的ARP请求数据包,并根据对应所述新数据包的流表规则进行相应处理。
所述ping回复步骤具体包括:
Open vSwitch虚拟交换机内核模块从物理网卡eth0接收新数据包;
Open vSwitch虚拟机内核模块匹配缓存中的流表规则,
如果匹配到,
Open vSwitch虚拟机内核模块根据匹配的流表规则中的action指示处理新数据包处理新数据包;
如果没有匹配到,
Open vSwitch虚拟机内核模块通过netlink方式与Open vSwitch应用层
ovs-vswitchd通信请求下发流表规则;
如果ovs-vswitchd中有对应的流表规则,
ovs-vswitchd下发流表规则到Open vSwitch虚拟机内核模块,Open
vSwitch虚拟机内核模块接收流表规则并进行存储;
Open vSwitch虚拟机内核模块根据接收到的流表规则对新数据包进行处理;
如果ovs-vswitchd中没有对应的流表规则,
将新数据包转发SDN控制器RYU;
SDN控制器RYU根据新数据包的信息及配置的流表规则,向Open
vSwitch虚拟机内核模块下发不同的流表规则,Open vSwitch虚拟机内核模块接收流表规则并进行存储;
Open vSwitch虚拟机内核模块根据接收到的流表规则中的action指示对新数据包进行处理。
其中,SDN控制器RYU根据新数据包的信息及配置的流表规则,向Open vSwitch虚拟机内核模块下发不同的流表规则,具体包括:
SDN控制器RYU在收到新数据包后,对新数据包进行拆包;
根据拆分后的数据包判断所述新数据包是否为ARP请求或ICMP请求数据包,此时接收的新数据包是ARP请求,则
SDN控制器RYU根据编写的RYU控制模块代码中指定的IP段判断接收的新数据包目的IP地址是否为指定IP段,
该新数据包的目的IP地址192.168.0.5/16是指定IP段
192.168.0.0/16段的IP地址,
则SDN控制器RYU向Open vSwitch虚拟机内核模块下发回复
ARP应答数据包的流表规则,
Open vSwitch虚拟机内核模块根据匹配的流表规则中的action指示回复ARP应答数据包。
附图4,客户端ping一个IP地址,采用本发明的方法,如果该IP地址在指定IP段内,或者本发明没有指定IP段,客户端都会收到ping回复,而全然不知安装有Open vSwitch和SDN控制器RYU的Linux虚拟机的存在,以为是收到的真正的ping回复,从而实现了对任意ping回复的效果。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均包含在本发明的保护范围之内。
- 一种实现任意IP地址ping回复的方法
- 一种实现任意IP地址ping回复的方法