linux udp发送错误,sendto()“无效参数”错误在Linux上的原始udp套接字

博主在尝试使用原始套接字发送IPv6 UDP数据包时遇到问题,sendto()函数返回“无效参数”错误。已排除IPv6校验和可能是问题的原因,因为设置了IPV6_CHECKSUM选项。问题可能涉及源和目标地址设置,博主分享了部分代码并寻求解决方案或工作示例。
摘要由CSDN通过智能技术生成

我试图用原始套接字发送udp数据包。对于IPv4,一切正常,但我无法突破IPv6套接字的问题,其中sendto()始终表示无效参数。最初我在考虑IPv6的强制校验和,但IPV6_CHECKSUM选项应该解决这个问题,所以我现在没有选择。sendto()“无效参数”错误在Linux上的原始udp套接字

我使用inaddr_any作为addr_from,并且使用addr_to的一些ipv6地址与同一个端口。我通过send_ip工具来源查看,它手动计算校验和并发送带有原始/原始套接字的数据包,但我希望linux根据基于策略的路由规则自动形成具有必要源地址的IP数据包。

有没有人有任何想法这个问题的根源是什么?或者使用raw/ipproto_udp套接字的任何工作示例?

在此先感谢!

PS:请忽略所有线程的东西

发送代码:

typedef struct thread_data {

char msg[BUFFER_LENGTH];

struct sockaddr_in6 addr_to;

struct sockaddr_in6 addr_from;

} thread_data;

void create_packet(const thread_data* data, void** packet, size_t* size) {

size_t msg_len = strlen(data->msg), udp_len = sizeof(struct udphdr);

struct udphdr udp = {0};

udp.source = data->addr_from.sin6_port;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值