Pox控制器如何在不安装流程规则的情况下发送数据包

2024-10-05 13:13:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pox控制器编写蠕虫检测代码。有人能告诉我如何编写一个函数,让我的控制器直接向主机发送数据包我的意思是假设主机a现在将****TCPSYN****数据包发送到主机B,因为流规则不可用,交换机将数据包发送到控制器,现在我要写函数其中****控制器****将在不安装任何流规则的情况下向主机B发送数据包。我正在用处理代码编写包

def\u handle_PacketIn(自身,事件):

packet = event.parsed
log.info("Packet come in %s"%packet.type)
dpidstr = dpid_to_str(event.dpid)
# updating out mac to port mapping
self.macToPort[(event.connection,packet.src)] = event.port
dst_port = self.macToPort.get((event.connection,packet.dst))

tcpp = packet.find('tcp')
if tcpp and tcpp.SYN:
        #here i want to write code where my controller will send tcp syn packet received from host A to the destination host(B) with installing any flow rules
if tcpp and tcpp.ACK:
        #here i want to write code where my controller will receive tcp synack packet and send this syn ack packet to the sender(A) which has sent syn packet to host (B) 

实际上我的算法是

  1. 假设内部主机A向新的外部主机发送一个TCP SYN B、 由于交换机中没有与此数据包匹配的流,它将被发送到POX控制器。在
  2. 在POX控制器上运行的TRW-CB实例只是转发这个 分组通过交换机,不设置任何流量。同时 算法也会进行正常的处理(即在主机列表中添加B- 已与A联系,并将连接请求添加到A的队列中)。在
  3. B的两个可能的回答是: (a) 如果接收到从B到a的TCP SYNACK,交换机将再次转发 这是到氮氧化物控制器(因为它仍然不匹配任何流量)。在 收到SYNACK后,控制器上的TRW-CB实例将安装 开关中有两个流量。第一个流匹配从发送的所有数据包 A到B,它在IP src字段中包含A的IP地址和B的IP地址 在IP dst字段中。除乙醚类型(设置为IP)外,所有其他 流中的字段是通配符。第二个流程与第一个流程相似, 但匹配从B发送到A的所有数据包。每个流都包含一个操作 将匹配的数据包转发出交换机的相关端口。广告- 另外,TRW-CB也会进行正常的处理(即移除 从A的队列请求连接并降低A的似然比。。 (b) 如果连接超时,那么TRW-CB将执行常规处理 (对于连接失败的情况)不与开关。因此未安装流。在

Tags: andtoeventhostpacketport控制器数据包
1条回答
网友
1楼 · 发布于 2024-10-05 13:13:29

有一些代码来处理这个包会有帮助,但无论如何,让我试着涵盖最简单和最一般的情况。在

假设您在主类init函数中有一个事件包侦听器,类似于

core.openflow.addListenerByName("PacketIn", self._handle_PacketIn)

然后在处理事件的函数中

def _handle_PacketIn (self, event): msg = of.ofp_packet_out(data=event.ofp) msg.actions.append(of.ofp_action_output(port=of.OFPP_FLOOD)) event.connection.send(msg)

因此,msg是控制器发送到交换机的消息,为了覆盖所有端口,您只需将传入的数据包淹没在任何地方。如果您知道目的地,您可以在这里进行调整,只将数据包发送到所需的端口。这将在闭环中失败,但它会给你一个起点。 查看更多关于http://archive.openflow.org/wk/index.php/OpenFlow_Tutorial#ofp_action_output_class的ofp_action_输出类的信息。在

相关问题 更多 >

    热门问题