发送以太网数据包时额外填充?

时间:2017-04-18 19:29:57

标签: c sockets memcpy ethernet packets

我正在编写一个代码来将数据包发送到另一个mac地址。我使用结构来创建一个数据包,如下所述:

typedef struct vlink_prm_in_s
{
vlink_header_t  header;
uint32_t        address;
uint16_t        length;
}vlink_prm_in_t;

当我想发送数据包时,我会执行以下步骤:

  vlink_prm_in_t g_pkt;
  g_pkt.header.verCmd = 0x43;
  g_pkt.header.reverseVerCmd = ~(g_pkt.header.verCmd);
  g_pkt.address = 0x11111111;
  g_pkt.length = 0x2222;
  memcpy(sendbuf+headerLen, &g_pkt, sizeof(g_pkt));
  printf("%x\n", sendbuf[headerLen+4] );
  payloadLen = sizeof(g_pkt);
  sendbuf[headerLen+payloadLen] = 0xA5;
  payloadLen++;

当我发送数据包时,我在WireShark中跟踪它时得到以下数据包:

aa bb cc dd ee 66 98 ee cb 03 be 1d ea e8 43 bc 00 00 11 11 11 11 22 22 00 00 a5

我不知道从哪里获得这些额外的零(突出显示)?感谢。

1 个答案:

答案 0 :(得分:0)

在互联网上查看后,我发现结构应该是纯粹增加或减少顺序(或者所有变量应该是相同的大小)。这样您就可以删除多余的零。所以我做了如下:

typedef struct vlink_prm_in_s
{
vlink_header_t  header;
uint16_t        address1;
uint16_t        address2;
uint16_t        length;
}vlink_prm_in_t;

这解决了我的问题。