python - 如何获取 TCP 包的包数?
问题描述
我正在使用 _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,
)
推荐阅读
- certificate - 家庭助理上的 Mosquitto:使用 CA 签名的服务器证书桥接到远程 MQTT 代理
- firebase - 使用电子邮件和密码创建用户(同时) Firebase Flutter
- java-8 - 如何将 KStream 中的记录对减少到 1 到 KTable
- reactjs - 如何使用 redux-toolkit 访问 redux 中另一个切片的状态?
- windows - 如何在powershell中递归截断文件名?
- javascript - 显示使用 OpenLayers 创建的最后一个多边形
- visual-studio-code - VS Code 找不到 Arduino IDE 路径
- python-3.x - 用beautifulsoup提取没有标签的文本
- javascript - 来自其他站点时如何自动打开选项卡?
- android - Flutter:打开 Facebook Messenger 时出现 ERR_UNKOWN_URL_SCHEME