【问题标题】:How to check if flag in TCP struct is set?如何检查是否设置了 TCP 结构中的标志?
【发布时间】:2016-05-25 02:45:15
【问题描述】:

我正在使用 pcap C 库来读取数据包。目前,我使用以下方法来检查struct tcphdr(此结构在netinet/tcp.h库中定义)中是否设置了标志:

struct tcphdr *tcp = ....

if(tcp->th_flags & TH_SYN) {
        //SYN FLAG IS SET?
    }

这是否总是适用于检查结构中是否设置了特定标志?或者,还有更好的方法?非常感谢任何建议/提示:)

【问题讨论】:

  • 对于那些对tcphdr 定义中的u_int16_t syn:1; 表示法感到困惑的人,请参阅here

标签: c networking tcp libpcap packet-capture


【解决方案1】:

我觉得这很好。 TH_SYN 是单个位,因此如果在 th_flags 中设置了该位,则表达式将为真(非零)。

【讨论】:

  • 相反,如果我想检查是否设置了一个标志但另一个未设置,则以下工作是否有效: if( (tcp->th_flags & TH_SYN) && !(tcp- >th_flags & TH_ACK)) ?
  • 是的,或者你可以使用 if ((tcp->th_flags & (TH_SYN | TH_ACK)) == TH_SYN)
猜你喜欢
  • 2010-11-23
  • 2011-03-09
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多