我正在使用_flow_stats_reply_handler检索流统计信息,如Ryu Traffic Monitor示例所示。

我使用以下命令进行打印:

file.write("\n{},{},{},{},{},{},{},{},{}"
                   .format(ev.msg.datapath.id,
                           stat.match['in_port'], stat.match['eth_src'], stat.match['eth_dst'],
                           stat.instructions[0].actions[0].port,
                           stat.packet_count, stat.byte_count,
                           stat.duration_sec, stat.duration_nsec))


注意stat.packet_count

我该如何更改以计算TCP数据包?我知道有一个ip_proto字段和一个tcp_flags字段,但我不知道如何编码匹配/计数。

编辑:
我对此进行了进一步研究,并将流匹配添加到我的请求流统计功能中:

def _request_stats(self, datapath):
    self.logger.debug('send stats request: %016x', datapath.id)
    ofp = datapath.ofproto
    parser = datapath.ofproto_parser

    cookie = cookie_mask = 0
    match = parser.OFPMatch(eth_type=0x0800)
    req = parser.OFPFlowStatsRequest(datapath, 0, ofp.OFPTT_ALL, ofp.OFPP_ANY, ofp.OFPG_ANY,
                                     cookie, cookie_mask, match)
    datapath.send_msg(req)


不幸的是,这仍然行不通,关于不为什么的任何想法将不胜感激。

最佳答案

如您所知,您应该向匹配项添加更多数据,例如ip_proto以便与tcp匹配,TCP的IP协议号为6,有关IP协议号的更多信息,请检查Wikipedia

请使用以下代码,在这种情况下,您无需设置tcp_flags

match = parser.OFPMatch(
    eth_type=0x0800,
    ip_proto=6,
    )

关于python - 如何获取TCP报文的报文数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54078523/

10-11 07:41