2010-07-15 98 views
0

我在等待“Linux网络编程”的到来,但在此期间我想请我的兄弟(和姐妹)在这里获取一些信息。如果我构建了一个包含以太网报头,ip报头和tcp/udp/icmp报头的原始报文结构。在使用IP_HDRINCL选项时,我需要填写什么?起初,我认为我必须做所有事情,但现在我明白,以太网头的src和dest mac地址可以由内核来处理。但是我需要填写什么内容,以及其他字段对于内核应该知道应该填写那些值?我在使用IP_HDRINCL时需要填写什么?

Thanx提前男孩(和女孩)!

回答

0

您从IP标头开始。但要正确设置IP和TCP/UDP帧的所有成员。

你的假设是正确的。发送原始IP帧时不要包含以太网报头。通常以太网被用作低层通信,但还有其他的。

+0

我已经建立了像一个hirarchy(不想用C中的单词继承...呵呵)最低级别的数据包是一个以太网数据包。然后一个IP数据包包含了一个以太网数据包和ip组件等等。因此,我自己也包含了以太网头。但我注意到,如果我只填写了src和dst ip和端口,我可以将src和dst mac设置为任何内容,并且内核将使用我的dst ip的mac地址使用的dst mac更新dst的mac。 – inquam 2010-07-16 08:12:42

+0

但是您将指向IP报头的指针传递给send()函数。如果在这个地址之前还有其他一些字节(如以太网报头),它不会在意。 – harper 2010-07-17 10:27:21

+0

我使用写入功能将我的数据包写入网络。如果我在我的ethheader中设置macaddresses,当我用wireshark查看时,它会反映在我发送的数据包中。这允许我欺骗我的src mac地址。如果我将该数据包作为TCP数据包发送,或者类似的话,det macaddress如果被内核回调覆盖。 – inquam 2010-07-19 06:09:03

相关问题