在 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