gpt4 book ai didi

c++ - 通过 UDP 套接字手动发送到 iperf? (C++)

转载 作者:行者123 更新时间:2023-11-30 05:42:04 26 4
gpt4 key购买 nike

我有一个程序需要测量通过机器布线后的总损耗。

本质上,我在机器 A 上使用 iperf 生成 UDP 流量,该流量发往机器 C。但是,我首先通过机器 B** 路由此流量,然后通过原始发送到机器 C使用 sendto() 套接字到端口 5001(iperf 监听的默认端口)。当运行 tcpdump 时显示机器 C 正在接收数据包,iperf 服务器看不到这些连接或数据包。

我搜索了 iperf 的源代码,看看它是如何工作的,我看到数据包被函数接受了

rc = recvfrom( mSettings->mSock, mBuf, mSettings->mBufLen, 0, 
(struct sockaddr*) &server->peer, &server->size_peer );.

基本上,因为它只是一个recvfrom,如果我非常确定我在任何时候都没有修改数据包,并且正在发送它们,我不明白为什么会有问题函数 sendto(s, buf, len, 0, (struct sockaddr*) &si_other, slen) 和一个 socket(AF_INET, SOCK_RAW, IPPROTO_UDP)

有人有什么想法吗?为什么 iperf 没有注意到这个连接?

**我实际上将数据包路由到机器 A 上的 TUN 设备,然后从 A 上的用户空间程序读取它们,使用 UDP 套接字将它们发送到 B,在 B 上的用户空间程序上读取它们,然后通过禁用了 IP_HDRINCL 的原始套接字。当机器 A 和 B 收到时,我打印出标题,但我没有看到任何奇怪的东西。

最佳答案

很有趣。原来问题是通过将机器 A 上的 TUN 设备分配给 eth0 来解决的。的 IP 地址。之前,我将 TUN 设备分配给它自己的 IP 地址(我确实尝试从 TUN 设备中删除 IP 地址,但后来它默认为 eth1 。这也没有用。)。

我猜一些修改是因为这个原因发生的,或者某种隧道/连接不是由iperf 建立的。因为数据包不是从 eth0 发出的之前。

如果有人对它的工作原理/原因有任何进一步的见解,我将非常感兴趣。

关于c++ - 通过 UDP 套接字手动发送到 iperf? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30849491/

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