【问题标题】:How to forward requests to a local ip without router(modem) portforwarding如何在没有路由器(调制解调器)端口转发的情况下将请求转发到本地 IP
【发布时间】:2014-05-27 12:03:22
【问题描述】:
我刚刚在 asp.net 中创建了一个本地 Web 系统,并使用 IIS express 8 将其托管在我的笔记本电脑上,
然后我将端口 9090 转发到我的笔记本电脑 ip 192.168.1.104,它工作得很好。
所以问题就在这里,当我去另一个网络时,例如到我朋友家,我必须将端口 9090 转发到他们路由器中的笔记本电脑 IP。所以我想知道有什么方法可以在不进入路由器的情况下完成这项工作并用c#编写一个应用程序来为我完成这项工作?
当我从他们那里获得 ip 时,让我的本地网站在所有网络中运行真是太好了。
我认为这可能是因为 sql server 是如何做到的,你知道如果你在 sql server 中有一个数据库,你可以使用 [serverIP]:1433 访问该数据库,而无需将端口 1433 转发到路由器中的服务器 ip。
【问题讨论】:
标签:
c#
asp.net
networking
【解决方案1】:
大家好,我自己找到了解决方案,想和大家分享,我只是使用这个链接http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP
关于从 VS 中的 com 选项卡引用 NATUPNPLib,并使用下面的代码来完成我的工作
用于获取移植的 ip-ports 列表
NATUPNPLib.UPnPNAT upnpnat = new NATUPNPLib.UPnPNAT();
NATUPNPLib.IStaticPortMappingCollection mappings = upnpnat.StaticPortMappingCollection;
foreach (NATUPNPLib.IStaticPortMapping portMapping in mappings)
{
listBox1.Items.Add(portMapping.Description + "-" + portMapping.ExternalIPAddress +
"_" + portMapping.ExternalPort + "-" + portMapping.InternalClient + "-" +
portMapping.InternalPort + "-" + portMapping.Protocol);
}
用于保存端口
NATUPNPLib.UPnPNAT upnpnat = new NATUPNPLib.UPnPNAT();
NATUPNPLib.IStaticPortMappingCollection mappings = upnpnat.StaticPortMappingCollection;
mappings.Add(9090, "TCP", 9090, "192.168.1.104", true, "proapp");
用于移除端口
NATUPNPLib.UPnPNAT upnpnat = new NATUPNPLib.UPnPNAT();
NATUPNPLib.IStaticPortMappingCollection mappings = upnpnat.StaticPortMappingCollection;
mappings.Remove(9090, "TCP");