我正在用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)
实际上我的算法是
有一些代码来处理这个包会有帮助,但无论如何,让我试着涵盖最简单和最一般的情况。在
假设您在主类init函数中有一个事件包侦听器,类似于
然后在处理事件的函数中
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_输出类的信息。在
相关问题 更多 >
编程相关推荐