【发布时间】:2017-04-19 03:32:19
【问题描述】:
我正在尝试在 C Linux 中使用 RAW 套接字发送以太网数据包。我的代码中有以下struct 定义:
typedef struct vlink_header_s
{
uint8_t verCmd;
uint8_t reverseVerCmd;
}vlink_header_t;
typedef struct vlink_reg_rd_s
{
vlink_header_t header;
uint32_t address;
uint16_t length;
}vlink_reg_rd_t;
在main 我创建了一个结构体:
vlink_reg_rd_t g_pkt;
g_pkt.header.verCmd = 0x10|VLINK_CMD_REG_RD;
g_pkt.header.reverseVerCmd = ~(g_pkt.header.verCmd);
g_pkt.address = 0x0007 .....
和消息:
char sendbuf[1024];
struct ether_header *eh = (struct ether_header *) sendbuf;
如何在 ether_header 之后将结构 g_pkt 中的所有信息添加到此 sendbuf 中,以便我可以使用以下方法发送完整的数据包:
sendto(sockfd, sendbuf, txLen, 0, (struct sockaddr*)&socket_address, sizeof(struct sockaddr_ll));
我的代码中的其他一切都在工作,我尝试了其他方法,将信息一个一个添加到sendbuf,它工作正常,我的机器也接收到另一端的数据包。我只是想让它更加通用,因为每个命令都有一堆命令和结构将最有效。谢谢。
【问题讨论】:
标签: c sockets struct packet ethernet