У меня есть программа, которая должна измерять полную потерю после маршрутизации через машину.Вручную отправить в iperf через UDP-сокет? (C++)
По существу, я генерирую трафик UDP с помощью iperf
на машине A, предназначенной для машины C. Однако сначала я маршрутизирую этот трафик через машину 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
, заметив это соединение?
** Фактически я отправляю пакеты на устройство TUN на машине A, затем читаю их из программы пользовательского пространства на A, отправляю их в B с помощью UDP-сокета, читаю их в программе пользовательского пространства на B, а затем отправляю их через сырое гнездо с отключенным IP_HDRINCL
. Я печатаю заголовки, когда они получены на машинах А и В, и я не вижу ничего странного.