【发布时间】:2016-08-13 07:57:31
【问题描述】:
我正在使用 pox 控制器编写蠕虫检测代码,谁能告诉我如何编写一个函数,让我的控制器将数据包直接发送到主机我的意思是假设主机 A 发送****TCPSYN**** 数据包现在发送到主机 B,因为流规则不可用,而不是交换机将数据包发送到控制器现在我想编写函数,**** 控制器**** 将在不安装的情况下将数据包发送到主机 B任何流规则。我正在编写数据包处理代码
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)
其实我的算法是这样的
- 假设内部主机 A 向新的外部主机发送 TCP SYN B. 由于交换机中没有匹配此数据包的流,它将被发送到 POX 控制器。
- 在 POX 控制器上运行的 TRW-CB 实例只是转发这个 数据包通过交换机,无需设置任何流。同时, 算法也进行正常处理(即将 B 添加到主机列表中) A 强烈联系并将连接请求添加到 A 的队列中)。
- B 的两种可能响应是: (a) 如果收到 B 到 A 的 TCP SYNACK,交换机再次转发 这到 NOX 控制器(因为它仍然不匹配任何流量)。之上 接收到 SYNACK,控制器上的 TRW-CB 实例安装 两个流在开关。第一个流匹配从发送的所有数据包 A到B。它在IP src字段中包含A的IP地址和B的IP地址 在 IP dst 字段中。除了 Ether 类型(设置为 IP),所有其他 流中的字段是通配符的。第二个流程和第一个类似, 但匹配从 B 发送到 A 的所有数据包。每个流包含一个动作 从交换机的相关端口转发匹配的数据包。广告- 此外,TRW-CB 也进行正常处理(即删除此 来自 A 队列的连接请求并降低 A 的似然比).. (b) 如果连接超时,则 TRW-CB 进行常规处理 (对于连接失败的情况)不与交换机交互。因此没有安装流。
【问题讨论】:
-
请发布一些您尝试过但无效的代码。请参阅How to Ask,了解有关如何充分利用您的问题的更多信息。
-
我已经发布了代码和算法,现在可以帮助我
标签: python network-programming sdn pox