Кажется, это должно быть так просто, но, поскольку это не моя область знаний, у меня чертовски много времени, чтобы понять, как это сделать.
По сути, у меня есть приложение Flash, и я подключаюсь к серверу Flash Media Server для потоковой передачи некоторого контента. Например, URL-адрес, который я использую для этого, выглядит так:
rtmp: //someserver.com/some/path/mp3: somefile
Все работает - но это своего рода проблема. Когда я пытаюсь сделать это, я имитирую, что мои пользователи пытаются воспроизвести мои медиафайлы в более строгих условиях, чем те, которые у меня есть (т.е. нет), а именно застревают за брандмауэрами или прокси-серверами, которые блокируют доступ к потокам RTMP.
По словам Adobe, Flash может автоматически обрабатывать прокси-серверы и брандмауэры, вот так (из документации):
Если вы не укажете номер порта в адресе RTMP, Flash попытается подключиться к порту 1935. В случае неудачи он попытается подключиться к порту 443; если это не удалось, он попробует порт 80. [И если это не удастся, он попытается подключиться через RTMPT (т.е. HTTP-туннелирование) на порт 80.] Таким образом, для доступа к портам 1935, 443 или 80 не требуется кодирования, если вы не укажете порт в адресе RTMP. .
Проблема, с которой я столкнулся, заключается в настройке надежной среды, в которой можно проверить, действительно ли такое поведение происходит. Например, я использую Windows-машину, поэтому с помощью брандмауэра Windows я могу заблокировать определенные порты и протоколы (1935, 443), но я не хочу блокировать порт 80, потому что предполагается последний резервный протокол (RTMPT). для работы на порту 80, а брандмауэр Windows дает мне достаточно детализации (насколько я знаю, во всяком случае), чтобы заблокировать «весь исходящий TCP-трафик на удаленный порт 80», то есть я, по-видимому, не могу заблокировать «весь исходящий RTMP-трафик на порт 80 "при выходе RTMPT трафик на порт 80 не изменится.
На данный момент я понимаю, что для этого мне, вероятно, потребуется настроить прокси-сервер. Это верно? Или есть более простой способ (по крайней мере, на Win 7) отфильтровать RTMP до 1935, RTMP до 443, RTMP до 80, но все же разрешить RTMPT до 80 (где все четыре имени хоста идентичны)? И если мне нужно настроить прокси-сервер, какой самый простой способ перейти на Windows? Я настроил WinProxy, который кажется немного странным, но, по-видимому, работает, но тогда я не могу понять, как сказать Windows, чтобы заставить весь TCP-трафик (включая RTMP, RTMPT и HTTO) через этот прокси-сервер, поэтому я может развернуться и отклонить запросы на RTMP.
Любая помощь будет очень признательна. Это не моя область знаний, и я уже потратил на это больше времени, чем должен был бы. :)
Вы не сможете фильтровать то, что использует порт 80, с любым базовым брандмауэром. Вам нужно будет либо использовать прокси-сервер, возможно (на самом деле даже не совсем уверен, что прокси сможет это сделать), либо брандмауэр, который может выполнять глубокую проверку пакетов (брандмауэр прикладного уровня).
Пока меня немного смущает это утверждение:
Или есть ... способ ... отфильтровать ... RTMP до 80, но все же разрешить RTMPT до 80 (где все четыре имени хоста идентичны)?
Я бы подумал, что вы также можете попробовать создать фильтр IPSec, чтобы заблокировать определенный трафик к / от определенных хостов и разрешить определенный трафик к / с определенных хостов ...