在POX中操作数据包

在POX中操作数据包

标签(空格分隔): 博客 SDN


想在SDN控制器中做点事情,必须要能够解析上来的packet,在POX中利用pox.lib.packet中的组件很方便,重点是熟悉各个协议的字段。POX文档 POX Wiki 相对比较完善,值得好好看看。

各个协议类继承了packet_base, 里面的find 方法很实用,在解析packet的时候, find(‘protocol’)就会解析得到对应协议的包。

解析到传输层后的payload类型是str,我们可以探测里面的内容,但是长度不一定是整个packet(可以修改)。

下面是我解析UDP包的过程,得到里面的内容之后,就可以对应设计自己的策略。

def spy_udp_packet(self, packet):
    ip = packet.find('ipv4')
    if ip is None:
      return
    log.debug('protocol={},srcip={},dstip={}'.format(ip.protocol, ip.srcip, ip.dstip))

    # we only care about UDP packet
    udp_packet = ip.find('udp')
    if udp_packet is None:
      return 
    log.debug('srcport={},dstport={}'.format(udp_packet.srcport, udp_packet.dstport))
    udp_payload = udp_packet.payload 
    # The payload include a '\n' , and its type is <type 'str'>
    log.debug('udp playload(len={}): {},type={}'.format(len(udp_payload), str(udp_payload), type(udp_payload)))

猜你喜欢

转载自blog.csdn.net/vonzhoufz/article/details/50133709