gpt4 book ai didi

python - POX - 安装一条规则,当某个数据包与 ofp_match 匹配时发送一个虚拟数据包

转载 作者:可可西里 更新时间:2023-11-01 02:54:04 25 4
gpt4 key购买 nike

是否可以在交换机上安装一条规则,指示交换机执行以下操作:

If packet_in is TCP:
send ( dummy packet )
send (packet_in)
send ( dummy packet)
else:
send (packet_in)

我很欣赏那是非常糟糕的伪代码,但它应该比我试图解释它更好地说明我正在尝试做的事情。

基本上,我试图通过传输虚拟数据包来为项目间隔传输 TCP 数据包,而不必要求将每个 TCP 数据包都发送到 Controller 。我希望交换机正常运行,但是当它收到一个发往某个端口的 TCP 数据包时,我希望交换机也从同一端口传输一个虚拟数据包(我已经构建),前往同一目的地。

我知道可能有一些更好的方法来实现我想要实现的目标 - 我乐于接受建议!

谢谢

最佳答案

据我所知,答案是否定的 OpenFlow 不支持这个概念,更不用说 Pox 了。 Pox 可以告诉交换机生成一个数据包,但是没有流表条目具有将另一个数据包发送到这里的操作。

一种可能的实现方式如下:

  1. 匹配TCP协议(protocol)和端口号有两个 Action 。 Action 1 发送数据包, Action 2 将数据包发送到流表的某个备用表。

  2. 在此表中有一个操作来修改数据包以发送此虚拟数据包。你不能制作一个特定的,但你可以说将目标 IP 修改为一些无意义的值或将一些无意义的 VLAN 设置为一种 sudo 标记。

编辑:用户要求澄清我所说的备用表的含义,因此我将尝试找到一些 pox 命令来显示我计划使用的过程。首先我建议 this wiki 上有很多基本的 pox 命令,它有点过时,在某些情况下是错误的,但总的来说它非常有用。

当说到备用表时,我指的是 openflow 1.3 启用的概念,它表示所有流表不必是单个列表即可进行处理。相反,所有数据包都可以转到表 0 进行处理,然后如果操作声明它可以将数据包发送到表 5 以进行扩展处理或基于表 0 发现的更有针对性的处理。这允许更多通用的操作,您可以将这个新概念视为表格的表格或二维数组,其中最终元素是流表条目。抱歉,table 这个词经常出现,我希望他们为这个概念选择一个不同的词。

默认情况下,Pox 不支持此概念,因为它使用 OpenFlow1.0,但是有一个扩展可以启用它,可以找到更多信息 here .一些重要的部分可以在下面找到。

# Turn on Nicira packet_ins
msg = nx.nx_packet_in_format()
event.connection.send(msg)
# Turn on ability to specify table in flow_mods
msg = nx.nx_flow_mod_table_id()
event.connection.send(msg)
msg = nx.nx_flow_mod()
msg.priority = 1 # Low priority
msg.actions.append(of.ofp_action_output(port = of.OFPP_CONTROLLER))
msg.actions.append(nx.nx_action_resubmit.resubmit_table(table = 1))
event.connection.send(msg)
msg = nx.nx_flow_mod()
msg.table_id = 1
msg.priority = 1 # Low priority
msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
event.connection.send(msg)

在此示例中,启用了多表支持,然后添加了一个流,该流将所有数据包发送到 Controller 和表 1,从那里表 1 有一个流表示泛洪所有数据包。希望这能让您大致了解它们的工作原理。

如果您还不知道如何使用 pox 编辑数据包,可以将示例操作附加到操作列表以更改目标 mac 地址,如下所示。

ofp_action_dl_addr.set_dst(EthAddr("01:02:03:04:05:06"))

对于vlan我之前提出的方法你可以做

msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=1234))

关于python - POX - 安装一条规则,当某个数据包与 ofp_match 匹配时发送一个虚拟数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com