Итак, я запустил эту программу на моем Mac, ipMidi, которая позволяет мне отправлять события midi через соединение Ethernet.
Он работает по протоколу UDP и отправляет миди от моей галки Ableton Live.
Я пытаюсь прочитать на той же машине, где работает ipMidi, пакеты из ipMidi в мою программу на C ++, но я не могу понять, как это сделать.
Я уже некоторое время занимаюсь исследованиями и не могу понять, как заставить ipMidi отправлять пакеты на мой локальный хост или прослушивать пакеты, проходящие через мой Ethernet.
Одним из инструментов, которые я обнаружил, был route, но мне не удалось скопировать запись в таблице ip для отправки пакетов в мою прослушивающую программу UDP.
Другой способ, который я нашел для этого, состоял в том, чтобы заставить мою программу присоединиться к группе многоадресной рассылки в ядре в целевом ip и порте из целевого пакета, который я прослушал в ipMidi с помощью wireshark, но это невозможно, потому что связывание говорит мне, что адрес используется.
Так что я действительно мог бы помочь с этим.
Там нет кода, я знаю, но это больше похоже на теоретическую вещь, чем на проблему реализации.
Надеюсь, я все объяснил, мой английский не самый лучший.
Спасибо за ваше время.
Кажется, вы открыты для разных техник. Я не сетевой эксперт, и я совсем не эксперт по iptables, но я бы попытался найти «тройник», эквивалентный iptables. Я нашел эту ссылку, которая может быть полезна для вас.
https://unix.stackexchange.com/questions/15870/iptables-port-mirroring
РЕДАКТИРОВАТЬ: еще один, который может быть полезным
http://www.bjou.de/blog/2008/05/howto-copyteeclone-network-traffic-using-iptables/
Еще один взлом, который приходит мне в голову, заключается в том, что, если вы можете контролировать, куда ipMidi отправляет пакет, вы можете отправить их на локальный хост на определенный порт, имея netcat
открыть для прослушивания на этом порту, а затем с помощью tee
перенаправить вывод в файл и прочитать этот файл с помощью вашей программы C ++. Выход из tee
будет, опять же, чтобы netcat
который может отправить данные, где вам нравится (другой хост).
Это было бы как:
ipMidi -> localhost -> nc listening -> tee -> nc sending -> destination
-> file -> your program.
Но это всего лишь идея попробовать, если никто не придет с лучшим решением (маловероятно).
Других решений пока нет …