1

这是代码

import pox.lib.packet as pkt
from pox.lib.packet import *
def _handle_PacketIn(self,event):
  packet=event.parsed
  if packet.type == pkt.IP_TYPE:
    ip_packet = packet.payload
    if ip_packet.protocol == pkt.TCP_PROTOCOL:
      tcp_packet = ip_packet.payload
    if <condition to check packet is TCP SYN or ACK or RST>: 
  1. 如果检查该 TCP 数据包是否为 SYN/ACK/RST 的表达式应该是什么?
4

1 回答 1

1

为了找到 SYN 、 ACK 等,你必须使用 packet.find 方法。以下只是对 POX (carp) 的 forwarding.l2_pairs 库存组件的一个小修改

假设我们已经启动并运行了 mininet

sudo mn --controller remote

在 packet = event.parsed 之后的第 41 行的 stock 组件forwarding.l2_pairs添加几行代码,我们将像这样修改

packet = event.parsed
tcp_found = packet.find('tcp')
if tcp_found:
  if tcp_found.SYN:
    print "SYN found"

像这样在与 mininet 不同的终端中运行 pox 组件

python pox.py forwarding.l2_pairs host_tracker openflow.discovery

现在,为了获得一些 SYN 标志,让我们进入 mininet 终端并设置一个默认的 python http 服务器

h1 python -m SimpleHTTPServer 80 &

并从主机 2 获取虚拟服务器的内容

h2 wget -O - h1

在我们运行 pox l2_pairs 组件的终端,我们检查输出

INFO:forwarding.l2_pairs:Pair-Learning switch running.
INFO:host_tracker:host_tracker ready
INFO:core:POX 0.2.0 (carp) is up.
INFO:openflow.of_01:[00-00-00-00-00-01 1] connected
INFO:host_tracker:Learned 1 2 6e:6e:ca:c9:2b:93
INFO:host_tracker:Learned 1 2 6e:6e:ca:c9:2b:93 got IP 10.0.0.2
SYN found
INFO:host_tracker:Learned 1 1 52:3b:b2:ff:ff:b7
INFO:host_tracker:Learned 1 1 52:3b:b2:ff:ff:b7 got IP 10.0.0.1
SYN found

这里要注意的是,如 POX 文档中所述,SYN、ACK 等是 tcp 属性

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

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

variable.attribute

我们很高兴(如果找到)。

于 2016-05-10T20:50:19.327 回答