【发布时间】:2021-07-08 04:15:01
【问题描述】:
在 SDN 控制器 (Ryu) 的 python 应用程序中,我如何检查数据包是 TCP SYN 还是 SYN-ACK,以便对这些数据包进行计数?
*if packet in is TCP*
self.total_packets += 1
【问题讨论】:
在 SDN 控制器 (Ryu) 的 python 应用程序中,我如何检查数据包是 TCP SYN 还是 SYN-ACK,以便对这些数据包进行计数?
*if packet in is TCP*
self.total_packets += 1
【问题讨论】:
我不知道这个特定的库,您是否尝试过查看 lib.packet.tcp 模块?我认为您需要的方法是has_flags()。
来自https://github.com/faucetsdn/ryu/blob/master/ryu/lib/packet/tcp.py有一个例子:
>>> pkt = tcp.tcp(bits=(tcp.TCP_SYN | tcp.TCP_ACK))
>>> pkt.has_flags(tcp.TCP_SYN, tcp.TCP_ACK)
True
编辑:
如果一个函数返回一个布尔值,它可以用在 if 作为条件:
if pkt.has_flags(tcp.TCP_SYN) or pkt.has_flags(tcp.TCP_SYN, tcp.TCP_ACK):
self.total_packets += 1
只测试 SYN 标志也应该匹配 SYN 和 SYN-ACK 数据包。
if pkt.has_flags(tcp.TCP_SYN):
self.total_packets += 1
【讨论】: