MDZ UPnP和端口映射 区别

DMZ(demilitarized zone):可以简单理解成把网关的全端口转发到指定内网主机上,只能指定一台主机。这是一种静态全端口映射。这个协议只要早网关开启就行了。

UPnP(Universal Plug and Play):这个协议的目的是动态的映射网关的指定端口到指定主机上,可以一把网关的不同端口映射到不同内网主机的不同端口上。这个协议需要网关开启,然后内网的主机操作系统支持,并且应用主动申请才能使用。

下面是一段java请求UPnP的接口,目的是把网关的8080 端口映射到192.168.1.100:8080

// 导入相关类和库
import org.cybergarage.upnp.*;
import org.cybergarage.upnp.device.*;
import org.cybergarage.upnp.ssdp.*;

public class UPnPPortMappingExample {
    public static void main(String[] args) {
        // 创建 UPnP 控制点对象
        ControlPoint controlPoint = new ControlPoint();
        
        // 启动 SSDP 发现
        controlPoint.start();

        // 搜索 UPnP 设备
        Device dev = controlPoint.getDevice("urn:schemas-upnp-org:device:InternetGatewayDevice:1");

        // 确保获取到了设备
        if (dev == null) {
            System.out.println("未发现 UPnP 设备");
            return;
        }

        // 获取 IGD 服务
        Service igd = dev.getService("urn:schemas-upnp-org:service:WANIPConnection:1");

        // 确保获取到了服务
        if (igd == null) {
            System.out.println("未发现 IGD 服务");
            return;
        }

        // 获取 WAN IP 地址
        Action getExternalIPAddressAction = igd.getAction("GetExternalIPAddress");
        getExternalIPAddressAction.setArgumentValue("NewExternalIPAddress", "");
        getExternalIPAddressAction.postControlAction();

        String externalIPAddress = getExternalIPAddressAction.getArgumentValue("NewExternalIPAddress");
        System.out.println("WAN IP 地址:" + externalIPAddress);

        // 添加端口映射规则
        Action addPortMappingAction = igd.getAction("AddPortMapping");
        addPortMappingAction.setArgumentValue("NewRemoteHost", "");
        addPortMappingAction.setArgumentValue("NewExternalPort", "8080");
        addPortMappingAction.setArgumentValue("NewProtocol", "TCP");
        addPortMappingAction.setArgumentValue("NewInternalPort", "8080");
        addPortMappingAction.setArgumentValue("NewInternalClient", "192.168.1.100");
        addPortMappingAction.setArgumentValue("NewEnabled", "1");
        addPortMappingAction.setArgumentValue("NewPortMappingDescription", "My Port Mapping");
        addPortMappingAction.setArgumentValue("NewLeaseDuration", "0");
        addPortMappingAction.postControlAction();

        System.out.println("端口映射已添加");
    }
}

端口映射:把网关的端口映射到指定主机的端口上,这个也是可以设置多个,处于DMZ和UPnP之间。

DMZ,UPnP,端口映射的目的都是把网关的请求转发到内网主机上,如果是用到同样的端口他们是冲突的。他们有一定的优先级,不同设备上可能不一样,

DMZ>端口映射>UPnP,易用程度依次降低,功能也助教变强,一般我们如果只是映射一台主机DMZ就够了,端口映射支持多个主机,但是每个主机端口在网关配置上定死的和主机,UPnP每个主机的端口都是主机内应用自己申请的。

posted on 2024-06-06 16:31  zhangyukun  阅读(122)  评论(0编辑  收藏  举报

导航