2015-06-15 4 views
1

У меня есть программа, которая должна измерять полную потерю после маршрутизации через машину.Вручную отправить в 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 на компьютере А на eth0. Раньше я назначал устройство TUN на свой собственный IP-адрес (я попытался удалить IP-адрес с устройства TUN, но затем он по умолчанию был eth1. Это тоже не сработало).

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

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