linux udp 打印ip,Linux UDP服务器 - 目标IP错误(示例代码)

我有一个嵌入式Linux设备,可以监听UDP数据包。该设备有两个以太网接口,因此可以在两个接口上检索数据包。在某些UDP消息/数据包上,我必须做一些特定的接收它的接口。所以我需要检测哪个接口收到了数据包。

我在Stackoverflow上发现了帖子和示例,展示了如何从IP_PKTINFO中提取目标IP。如果我逐个测试接口,这可以正常工作。连接两个接口并接收目标IP是相同的。

我注意到ifindex不一样,但我不明白为什么ipi_spec_dst是相同的,当我清楚地在两个不同的接口和两个不同的IP接收数据包。

负责提取目标IP的C / C ++代码:

ssize_t byteCount=recvmsg(f_socket, &message, 0);

if (byteCount==-1) {

printf("%s",strerror(errno));

}

for (struct cmsghdr *cmsg = CMSG_FIRSTHDR(&message);

cmsg != NULL;

cmsg = CMSG_NXTHDR(&message, cmsg))

{

if (cmsg->cmsg_level != IPPROTO_IP || cmsg->cmsg_type != IP_PKTINFO) continue;

struct in_pktinfo *pi = (struct in_pktinfo*) CMSG_DATA(cmsg);

char* destAddr = (char*) calloc(4, sizeof(char));

destAddr = inet_ntoa(pi->ipi_spec_dst);

std::cout << destAddr << " " << std::to_string(pi->ipi_ifindex) << std::endl;

}

输出eth0已连接:

172.20.55.9 4

172.20.55.9 4

172.20.55.9 4

...

输出eth0已连接:

200.0.0.101 6

200.0.0.101 6

200.0.0.101 6

...

输出eth0和eth1连接:

172.20.55.9 6

172.20.55.9 4

172.20.55.9 6

172.20.55.9 4

...

预期产量:

200.0.0.101 6

172.20.55.9 4

200.0.0.101 6

172.20.55.9 4

...

首先,我不确定这是否是预期的,我认为不是,但我可能没有正确理解文档。

如果需要,我可以提供更多代码。

代码取自:

非常感谢任何和所有的帮助。谢谢。

-aln

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值