访问基于 Linux 的 IPHDR 和 TCPHDR

accessing linux based iphdr and tcphdr

本文关键字:IPHDR TCPHDR Linux 访问      更新时间:2023-10-16

我正在做一些网络编程。我正在尝试创建 tcp 和 ip 标头。我在阅读中发现有两种方法可以做到这一点:1)基于linux和2)基于BSD。

我想使用 linux 方法,基本上包括 linux/ip.h 和 linux/tcp.h我正在寻找的标头类型是

     struct tcphdr {
    unsigned short source;
    unsigned short dest;
    unsigned long seq;
    unsigned long ack_seq;  
    unsigned short doff:4;
    unsigned char syn;
    unsigned short window;  
    unsigned short check;
    unsigned short urg_ptr;

};

但我得到这个:

    struct tcphdr {
       u_short th_sport;
       u_short th_dport;
       tcp_seq th_seq;
       tcp_seq th_ack;
       u_int   th_x2:4,
             th_off:4;
       u_char  th_flags;
       u_short th_win;        
       u_short th_sum;        
       u_short th_urp;        
 };

现在,我在Mac上使用Xcode用c ++进行编码。但是,当我执行 #include 时,它给我一个错误,即"找不到头文件"

谁能告诉我如何解决这个问题?

我已经编辑了我的回复。

您应该在用户空间中包含/usr/include/netinet/tcp.h(和 ip.h)。 .../linux/*.h 由设备驱动程序、模块和内核代码使用。

如果要使用 BSD 声明,请定义_BSD_SOURCE。