【问题标题】:Identify ACK packets from wget in Mininet从 Mininet 中的 wget 识别 ACK 数据包
【发布时间】:2016-05-20 04:41:20
【问题描述】:

在 mininet 中,我能够在我的自定义 POX 控制器 c0 中的服务器 h1 和主机 h4 之间建立 TCP 连接,如下所示:

h1.cmd('python -m SimpleHTTPServer 80 &')
thread.start_new_thread(tcp_thread, h4)

def tcp_thread(src):
    for i in range(10):
        src.cmd('wget -O - 10.0.0.1')
        time.sleep(5) 

h4 向服务器请求 HTTP 页面,并根据 TCP 标准保持正常确认服务器。在这里,我希望能够强制h4 使用它们之间的另一条路径发送ACK 数据包。我在转发或创建路径方面没有问题,但在发送 h4 之前如何捕获或提取 Ack 数据包以便我可以根据需要转发它们。

谢谢。

【问题讨论】:

  • 你有处理PacketIn的函数吗?
  • 是的,我愿意。它是 def _handle_PacketIn(self, event): 。它如何帮助您思考?

标签: python mininet pox


【解决方案1】:

如果你有一个 PacketIn 函数,你可以添加几行代码来捕获 ACK 标志

packet = event.parsed
tcp_found = packet.find('tcp')
if tcp_found:
  if tcp_found.ACK:
    print "ACK found"
    # do your things

ACK 标志是 POX wiki 中所述的 tcp 属性

TCP(tcp) 属性:...... FIN (bool) - 设置 FIN 标志时为真 ACK (bool) - 设置 ACK 标志时为真......

为了获得这些属性,我们使用 find 方法将数据包的 tcp 部分分配给一个变量,然后我们使用点 (.) ex.访问这些属性。

variable.attribute
tcp_found.ACK

【讨论】:

  • 非常感谢您赐教。
  • 我想问一个问题:我使用了你的建议,这是完美的。但是,由于握手过程,您知道从h4 发送的第一个数据包是 SYN。因此,从h4 引发的 PacketIN 指示传入的 [SYN] 数据包到交换机!
  • 问题是什么?
  • 问题是:是否可以在流规则match()中指定TCP包的类型(ACK或SNY)?例如,我将创建两个相同的流规则,从srcdst,但 TCP 类型不同,一个通过特定路由转发这些 ACK,另一个在不同路由中转发。
  • 不直接使用 POX。在 openflow 1.5+ 及更高版本中可以使用 flow mod 规则中的匹配 tcp 标志。我相信 Pox 使用 1.0。
猜你喜欢
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
相关资源
最近更新 更多