这是代码
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>:
- 如果要检查TCP数据包是否为SYN/ACK/RST,则其中的表达式应该是什么
为了找到SYN、ACK等,您必须使用packet.find方法。以下只是POX(鲤鱼)的forwarding.l2_pairs库存组件的一个小修改
假设我们已经启动并运行了迷你网
sudo mn --controller remote
在库存组件转发处添加几行代码。在package=event之后的第41行添加l2_pairs。解析后,我们将修改
packet = event.parsed
tcp_found = packet.find('tcp')
if tcp_found:
if tcp_found.SYN:
print "SYN found"
在不同的终端运行,而不是mininet像一样的痘组件
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属性:。。。。。。FIN(bool)-设置FIN标志时为TrueSYN(bool)-设置SYN标志时为True……
为了获得这些属性,我们使用find方法将数据包的tcp部分分配给一个变量,然后使用点(.)ex.访问这些属性
variable.attribute
我们很乐意去(如果找到的话)。