gpt4 book ai didi

c - 如何制作具有特殊 header 结构的原始数据包并通过原始 unix 套接字发送

转载 作者:行者123 更新时间:2023-11-30 15:13:04 24 4
gpt4 key购买 nike

我需要创建一条消息并通过 unix 套接字发送它。

我有一个套接字定义如下:socket(AF_UNIX, SOCK_RAW, 0)

我要发送的消息/数据包的 header 结构如下:

struct map_msghdr {
uint8_t map_msglen; /* to skip over non-understood messages */
uint8_t map_version; /* future binary compatibility */
uint16_t map_type; /* message type */

uint32_t map_flags; /* flags, incl. kern & message, e.g. DONE */
uint16_t map_addrs; /* bitmask identifying sockaddrs in msg */
uint16_t map_versioning;/* Mapping Version Number */

int map_rloc_count;/* Number of rlocs appended to the msg */
pid_t map_pid; /* identify sender */
int map_seq; /* for sender to identify action */
int map_errno; /* why failed */

};

我需要构建一个包含 map_msghdr{} 结构的缓冲区,后跟一个套接字地址结构。套接字地址结构将有一个 IP 地址。我该怎么做呢?你能给我举个例子吗?谢谢。

最佳答案

分配(静态或动态)sizeof(struct map_msghdr) + sizeof(sockaddr_storage) 字节。将map_msghdr复制到分配内存的开头,并将套接字地址结构复制到 header 结构之后的缓冲区(即buffer + sizeof(map_msghdr))。发送缓冲区。

<小时/>

简单的伪代码:

struct map_msghdr hdr;
struct sockaddr_storage addr;

fill_in_header(&hdr); // You need to write this
fill_in_sockaddr(&addr); // You need to write this

// Create a buffer to send the header and address
int8_t buffer[sizeof hdr + sizeof addr] = { 0 };

memcpy(buffer, &hdr, sizeof hdr); // Copy header to beginning of buffer
memcpy(buffer + sizeof(hdr), &addr, sizeof addr); // Copy address after header

write(your_socket, buffer, sizeof buffer); // Write buffer to socket

关于c - 如何制作具有特殊 header 结构的原始数据包并通过原始 unix 套接字发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34856395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com