Я использую http://managedupnp.codeplex.com/ API, чтобы открыть порт с помощью UPNP на моем маршрутизаторе NetGear DG834g со следующим кодом ..
public void UPNPOpenPort(int port)
{
Services lsServices;
lsServices = Discovery.FindServices("urn:schemas-upnp-org:service:WANPPPConnection:1");
if (lsServices.Count > 0)
using (Service lsService = lsServices[0])
{
try
{
object[] loObj = new object[] { "", port, "TCP", port, "10.0.0.100", true, "Custom Mapping", 0 };
lsService.InvokeAction("AddPortMapping", loObj);
}
catch (Exception loE)
{
MessageBox.Show(
String.Format(
"{0}: HTTPSTATUS: {1}",
loE.Message,
lsService.LastTransportStatus));
}
}
else
{
MessageBox.Show("Doh No Router Found");
return;
}
}
У меня есть сервисный хост с привязкой NetTCP с тем же портом, который я подаю в подпрограмму для настройки переадресации UPNP, и я вижу активную запись UPNP в конфигурации маршрутизатора. Я вижу, что порт прослушивается на моем локальном компьютере, и другие компьютеры в моей локальной сети могут подключаться к порту, однако с помощью онлайн-проверки порта он отображается как закрытый, даже если маршрутизатор сообщает, что он должен перенаправлять на правильный внутренний IP-адрес.
У кого-нибудь есть идеи или я что-то упускаю?
С наилучшими пожеланиями,
Кристофер Лич