我试图纠正一些套接字编程内容,在尝试制作 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 应该存在于我也包含在内。
任何帮助表示赞赏。
我想你现在已经找到了解决方案,因为这个问题已经有 8 年半了:-)
但无论如何:
struct iphdr
仅限 Linux。<linux/ip.h>
。