【问题标题】:How to get the payload from TCP packet?如何从 TCP 数据包中获取有效负载?
【发布时间】:2021-08-25 16:30:57
【问题描述】:

我想使用 pcapplusplus 库或其他类似库从 tcp 数据包中提取 tcp 有效负载数据。我搜索文档但无法找到如何获取 tcp 有效负载,但我可以通过使用各种 api 获取 tcp 标头中的几乎任何内容。如何获取有效载荷?

Public Member Functions
    TcpLayer (uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
 
    TcpLayer ()
 
    TcpLayer (uint16_t portSrc, uint16_t portDst)
 
    TcpLayer (const TcpLayer &other)
 
TcpLayer &  operator= (const TcpLayer &other)
 
tcphdr *    getTcpHeader () const
 
uint16_t    getSrcPort () const
 
uint16_t    getDstPort () const
 
TcpOption   getTcpOption (TcpOptionType option) const
 
TcpOption   getFirstTcpOption () const
 
TcpOption   getNextTcpOption (TcpOption &tcpOption) const
 
size_t  getTcpOptionCount () const
 
TcpOption   addTcpOption (const TcpOptionBuilder &optionBuilder)
 
TcpOption   addTcpOptionAfter (const TcpOptionBuilder &optionBuilder, TcpOptionType prevOptionType=TCPOPT_Unknown)
 
bool    removeTcpOption (TcpOptionType optionType)
 
bool    removeAllTcpOptions ()
 
uint16_t    calculateChecksum (bool writeResultToPacket)
 
void    parseNextLayer ()
 
size_t  getHeaderLen () const
 
void    computeCalculateFields ()
 
std::string     toString () const
 
OsiModelLayer   getOsiModelLayer () const

这些是获取 tcp 标头数据的 API。

【问题讨论】:

    标签: tcp pcap pcapplusplus


    【解决方案1】:

    为了获取(任何)层有效负载,您应该使用getLayerPayload() API,例如:

    pcpp::TcpLayer* tcpLayer = myPacket.getLayerOfType<pcpp::TcpLayer>();
    uint8_t* payload = tcpLayer->getLayerPayload();
    size_t payloadSize = tcpLayer->getLayerPayloadSize();
    

    【讨论】:

      【解决方案2】:

      经过大量搜索,我得到了答案。它是TcpStreamData::getData() 方法。您可以查看this 链接以获取API 文档。

      【讨论】:

      • 不,这是错误的。 TcpStreamData::getData() 仅用于 TCP 重组,用于获取 TCP 重组后的数据流
      猜你喜欢
      • 2011-05-17
      • 2022-08-17
      • 2016-10-05
      • 2011-04-28
      • 2015-02-06
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多