Как получить количество пакетов TCP-пакетов? - PullRequest
0 голосов
/ 07 января 2019

Я получаю статистику потока, используя _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, но я не знаю, как закодировать совпадение / счет.

Edit: Я дополнительно исследовал это и добавил соответствие потока моей функции статистики потока запросов:

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)

Это, к сожалению, до сих пор не работает, любые идеи о том, почему бы не быть, будет принята с благодарностью.

1 Ответ

0 голосов
/ 04 февраля 2019

Вы должны добавить больше данных к вашему совпадению, например ip_proto, чтобы сопоставить с tcp. Как вы, возможно, знаете, номер протокола IP TCP равен 6, для получения дополнительной информации о номерах протокола IP проверьте Википедия .

Пожалуйста, используйте код ниже, вам не нужно устанавливать tcp_flags в этом случае.

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