在 mac 上找不到 iphdr 结构

问题描述 投票:0回答:1

我试图纠正一些套接字编程内容,在尝试制作 cpp 文件时遇到以下错误,我使用的是 OS X 10.11 :

user-router/sm.cpp:84:3:错误:未知类型名称“iphdr”

这是该特定部分的代码:

void SimulatedMachine::run () {
// TODO: write your business logic here...
struct ethernet_header {
byte  dst[6];
byte  src[6];
uint16 type;
} __attribute__ ((packed));

const int frameLength = sizeof (ethernet_header) + 100;
byte *data = new byte[frameLength];

ethernet_header *eth = (ethernet_header *) data;
memset (eth->dst, 255, 6); // broadcast address
memcpy (eth->src, iface[0].mac, 6);
eth->type = htons (0x0800);

iphdr *packet = (iphdr *) (data + sizeof (ethernet_header));
packet->version = 4;
packet->ihl = 5;
packet->tot_len = htons (100);

Frame frame (frameLength, data);
sendFrame (frame, 0); // sends frame on interface 0
delete[] data;
cerr << "now ./free.sh and check the pcap log file to see the sent packet" <<      endl;
}

因为 iphdr 应该存在于我也包含在内。

任何帮助表示赞赏。

c++ macos sockets ip
1个回答
0
投票

我想你现在已经找到了解决方案,因为这个问题已经有 8 年半了:-)

但无论如何:

struct iphdr
仅限 Linux。
您可以在这里找到它:
<linux/ip.h>

它在 macOS 中不可用。

© www.soinside.com 2019 - 2024. All rights reserved.