这是代码
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>:
答案 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
我们很高兴(如果找到的话)。