我正在使用 pox 控制器编写蠕虫检测代码任何人都可以告诉我如何编写一个函数,我的控制器将直接向主机发送数据包我的意思是假设主机A发送**** TCPSYN ****数据包到主机B现在因为流量规则不可用而不是交换机将数据包发送到控制器现在我想写功能****控制器****将数据包发送到主机B而不安装任何流量规则。我正在编写包含handeling代码的数据包
def _handle_PacketIn(self,event):
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)
实际上我的算法就像
答案 0 :(得分:0)
有一些代码可以帮助处理数据包,但无论如何,让我尝试覆盖最简单和通用的情况。
假设您在主类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处查看forp_action_output类的更多内容。