我有一個程序,需要通過機器路由後測量總損失。通過UDP套接字手動發送給iperf? (C++)
本質上,我在計算機C上發送的機器A上的iperf
生成UDP通信。但是,我首先通過計算機B **發送此通信,然後通過原始套接字將其發送到計算機C到端口5001( iperf
監聽的默認端口)與sendto()
。雖然運行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上收到標題時會打印出標題,而且我沒有看到任何奇怪的東西。