gpt4 book ai didi

tcp - 从 * char eth/ip/tcp 打包程序表示中获取 TCP 选项(超出 tcphdr->doff)

转载 作者:可可西里 更新时间:2023-11-01 02:47:45 26 4
gpt4 key购买 nike

玩转 http://www.tcpdump.org/sniffex.c获取数据包选项。

void payload (char *data) { // data contains full copied packet source without ethernet header.
char *ptr = NULL;
//ptr = data;
//struct ip *pip = (struct ip *) ptr;

ptr = data + sizeof(struct ip);
struct tcphdr *thdr = (struct tcphdr *) ptr;

ptr = data + sizeof(struct ip) + (thdr->doff*4);
char *txt = (char *) ptr;
// *txt can be fprint/cout'ed, returned OK.
}
  1. data + struct ip 指向(指针)(unsigned char)内存中的TCP头
  2. data + struct ip + thdr->doff*4 points to end of TCP options = beginning of the data

给定以下结构,

typedef u_int tcp_seq;

struct sniff_tcp {
u_short th_sport; /* source port */
u_short th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgement number */
u_char th_offx2; /* data offset, rsvd */
#define TH_OFF(th) (((th)->th_offx2 & 0xf0) >> 4)
u_char th_flags;
#define TH_FIN 0x01
#define TH_SYN 0x02
#define TH_RST 0x04
#define TH_PUSH 0x08
#define TH_ACK 0x10
#define TH_URG 0x20
#define TH_ECE 0x40
#define TH_CWR 0x80
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
u_short th_win; /* window */
u_short th_sum; /* checksum */
u_short th_urp; /* urgent pointer */
};

TCPDump代码中也有引用:

 tp = (struct tcphdr *)bp; // packet header.
hlen = TH_OFF(tp) * 4; // data length?

if (hlen > sizeof(*tp)) {
register const u_char *cp;
register u_int i, opt, datalen;
register u_int len;
hlen -= sizeof(*tp);

因此,要读取数据包的一部分,即选项所在的位置,需要:

  1. 假设数据包中指定的长度大于结构长度
  2. 读取(ethernet + ip + tcphdr)结构长度后的 N 个字节?
  3. 放下那些字节,现在读取有效负载。

对吗?读取随机负载的字节序列而不是实际数据只会让我厌烦。

最佳答案

选项位于 data + sizeof(struct ip) + sizeof(struct tcphdr)txt 之间。可能没有选项,在这种情况下这些指针将相等。

关于tcp - 从 * char eth/ip/tcp 打包程序表示中获取 TCP 选项(超出 tcphdr->doff),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4221448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com