检查 TCP 数据包:Ryu - Python

check for TCP packet : Ryu - Python

在 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

编辑:

如果一个函数 returns 是一个布尔值,它可以用在 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