tl; dr - Я пытаюсь открыть внутренний и внешний порт 4305 на свой локальный адрес 192.168.1.103 через UPnP с кодом Visual Basi c.
Я искал лучшее часть 20 часов ищу способ открыть эти порты на моем маршрутизаторе через код UPnP для VB. Пока мне ничего не удалось запустить порт через VB. Короче говоря, я попробовал около 4,3 различных вариантов с переменным успехом. Это:
Microsoft Interop / COM NATUPnP Library (https://docs.microsoft.com/en-gb/previous-versions/windows/desktop/ics/network-address-translation-traversal-interfaces)
NetworkLight_VB (старая программа, которую я надеялся использовать для справки, http://www.thijsschreijer.nl/blog/?p=450)
Библиотека ManagedUPnP (это .3, я потратил немного времени на изучение этой библиотеки, так как это C#, но все же думаю, что стоит упомянуть, https://archive.codeplex.com/?p=managedupnp)
UPnPc / MiniUPnP c (http://miniupnp.free.fr/)
Portmapper (https://github.com/kaklakariada/portmapper)
Библиотека типов NATUPnP 1.0
Имея некоторые предварительные знания о службах взаимодействия с помощью программ на основе Excel, это казалось довольно хорошим решением, однако оно не продвинулось так далеко, как объект COM NATUPNPLib.IStaticPortMappingCollection
. всегда возвращать как ничто. Я предполагаю, что это связано с тем, что NATUPNPLib.UPnPNAT
также возвращается пустым, хотя Visual Studio показывает его как инициализированный COM-объект. С небольшой информацией или указаниями, кроме «Вероятно, ваш UPnP отключен» (это не так), я решил посмотреть, есть ли другой способ, и двинулся дальше.
NetworkLight_VB
Пытаясь найти работающие примеры запуска UPnP через VB, я быстро понял, что это не самая популярная тема c и о ней почти не говорили в течение многих лет, и эта программа не была исключением. Открыв программу, казалось, что она работает нормально, хотя у меня не было никаких указаний на то, что она действительно работает должным образом, поскольку мой маршрутизатор не показывает активности UPnP на порте, который он пытался поразить. Я считаю, что здесь все еще есть потенциал с используемой библиотекой, но я не уверен, как правильно ее использовать или ссылаться на нее в моей собственной программе.
ManagedUPnP Library
Это то же самое, что и с библиотекой UPnP, используемой программой NetworkLight_VB; не уверен, как его использовать. (Будучи полностью самоучкой, мои основы знаний в лучшем случае шаткие. Единственные ссылки, которые я успешно использовал, - это Visual Stud ios с опцией «добавить ссылку», как в службе взаимодействия NATUPnP)
UPnPc / MiniUPnP c
Это показало многообещающие возможности обходного пути, позволяющего использовать скрытое окно CMD для выполнения грязной работы, но это также не удалось. Хуже всего то, что я понятия не имею, почему. Казалось, что его запуск работает без проблем, и это повторяет успех в запуске UPnP, однако мой маршрутизатор сказал мне иное. Проверка списка UPnP не показала открытого порта, и любая попытка установить связь между моим хостом и клиентскими программами не удалась.
К этому моменту я был готов просто сдаться и выполнить перенос вручную. Конечно, если все, что я пытался, продолжало терпеть неудачу, должно быть, что-то не так с моей настройкой, компьютером, что-то, что плохо себя ведет. Но я сделал еще один шанс.
Portmapper
Эта изящная маленькая java программа работала как шарм. Я ввел информацию, проверил свой мастер маршрутизатора и, о чудо, порт был открыт и готов. Тестируя свои клиентские и хост-программы, я подтвердил, что они работают именно так, как я хотел. Была только одна проблема: включить это в мою программу. Просматривая веб-сайт автора, я обнаружил, что у него действительно есть интерфейс командной строки с примерами, хотя мои жалкие (и очень утомленные) попытки использовать этот интерфейс командной строки не сработали. Однако это не должно быть слишком сложно.
Что меня беспокоит, так это то, что для запуска на компьютере требуется Java, и, поскольку это программа, основанная на одноранговой сети, заменив «просить пользователя перенаправить порт» на «просить пользователя установка Java 'нежелательна (хотя, если все остальное не помогает, пусть будет так. Нажать установку намного проще, чем использовать мастер шлюза маршрутизатора).
В идеале я хотел бы иметь службу NATUPnP Interop или любая из библиотек работает так, что я не запускаю код вне основной программы, но я действительно хочу, чтобы это работало, поэтому я, вероятно, буду использовать все, что работает.
очень приветствуются библиотеки, примеры рабочих программ или предложения по альтернативным методам.