如何检查数据包类型是痘控制器中的tcp syn或rst

时间:2016-05-10 13:51:27

标签: python python-2.7 sdn pox

这是代码

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,那么表达式应该是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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标志时为True   SYN(bool) - 设置SYN标志时为True   ......

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

variable.attribute

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