Вручную отправить в 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 отключен. Я распечатываю заголовки, полученные на машинах А и В, и не вижу ничего странного.

1

Решение

Интересно. Оказалось, что проблема была решена путем назначения устройства TUN на машине A eth0IP-адрес. Ранее я назначал устройству TUN его собственный IP-адрес (я пытался удалить IP-адрес с устройства TUN, но затем по умолчанию eth1, Это тоже не сработало.)

Я предполагаю, что некоторые изменения происходили из-за этого, или что какое-то туннелирование / соединение не было установлено iperf потому что пакеты не были отправлены из eth0 до.

Если у кого-то есть дальнейшее понимание того, как / почему это работает, мне было бы очень интересно.

1

Другие решения


По вопросам рекламы [email protected]