根据给定的参数创建以太网帧。不需要计算帧的校验码。 实现函数: int generate_eth_frame(unsigned char *input_eth, unsigned char *output_eth, unsigned short type, char *data, int d ata_len); 参数: input_eth,输入的帧,从中获取该帧的源/目的地址 output_eth,创建的帧,其源地址为input_eth的目的地址;其目的地址为input_eth的源地址。注意输入和输出帧的地址位置互换。 type,为创建帧指定的帧类型,注意字节顺序。 data,为创建帧封装的数据 data_len,为输入字符串的长度,注意如果封装的数据长度太短,还需要填充,以满足以太网冲突检测的需要。 返回: 创建的帧长度,即以太网协议的首部及数据,不包括帧校验码
时间: 2023-05-28 16:06:55 浏览: 119
以太网帧生成器
。#include <string.h>
int generate_eth_frame(unsigned char *input_eth,
unsigned char *output_eth,
unsigned short type,
char *data,
int data_len)
{
// 交换源/目的地址
memcpy(output_eth, input_eth + 6, 6);
memcpy(output_eth + 6, input_eth, 6);
// 设置帧类型
output_eth[12] = type >> 8;
output_eth[13] = type & 0xff;
// 封装数据
memcpy(output_eth + 14, data, data_len);
int frame_len = 14 + data_len;
// 如果数据长度不足46字节,填充0
if (frame_len < 46) {
memset(output_eth + frame_len, 0, 46 - frame_len);
frame_len = 46;
}
return frame_len;
}
阅读全文