【问题标题】:Port Forward using UPnP - close port使用 UPnP 进行端口转发 - 关闭端口
【发布时间】:2014-02-21 09:06:59
【问题描述】:

我正在使用来自Port Forwarding by Using "HNetCfg.NATUPnP" Ole Object Failed 的代码进行端口转发,工作正常,但应用程序终止时我无法关闭端口。

AddUPnPEntry(1234, 'Hello3', '192.168.1.34');

即使我重新启动了我的电脑,1234 端口仍然打开,我在 canyouseeme.org 上对其进行了测试。 那么如何关闭端口呢?

编辑:已解决,我只需要重新启动(关闭再打开)我的路由器即可再次关闭端口。

【问题讨论】:

  • “重启后端口仍然打开”是什么意思?您是否尝试过连接到端口?您是否使用 netstat -ano(或类似方法)检查​​是否有实际进程在侦听端口?
  • @Frank 我的意思是端口仍在转发,我在 canyouseeme.org 上尝试过“您的 ISP 没有阻止端口 1234”,是的,有人仍然可以使用端口 1234 连接到我我使用我的 IdTCPServer1,它是我的聊天应用程序
  • 如果我正确理解了 canyouseeme.org 的输出,它只会告诉您是否有防火墙阻止访问它们和您的计算机之间的端口 1234。它不会告诉您是否有实际程序在端口 1234 上运行。请尝试连接到该端口(例如使用 telnet),并检查 netstat 的输出。
  • 重启路由器不是客户的解决方案。它可能适用于测试,但不是一个长期的好解决方案。
  • @user1564858,你真的让他们工作了吗???怎么样?

标签: delphi port delphi-7


【解决方案1】:

AddUPnPEntry() 使用IStaticPortMappingCollection.Add() 方法。有一个关联的IStaticPortMappingCollection.Remove()方法,例如:

Procedure RemoveUPnPEntry(Port: Integer);
Var
  Nat: Variant;
  Ports: Variant;
Begin
  try
    Nat := CreateOleObject('HNetCfg.NATUPnP');
    Ports := Nat.StaticPortMappingCollection;
    Ports.Remove(Port, 'TCP');
  except
    ShowMessage('An Error occured with removing UPnP Ports. ' +
      'Please check to see if your router supports UPnP and ' +
      'has it enabled or disable UPnP.');
  end;
End;

RemoveUPnPEntry(1234);

【讨论】:

  • 它总是检索到一个错误,告诉它无法关闭端口,因为它可能没有启用 upnp,但是当我打开它时,没有发生错误。
  • 与 Microsoft 合作,因为 HNetCfg.NATUPnP 是 Microsoft 的 UPnP 实现。如果Add() 有效但Remove() 失败,则Remove() 可能存在错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 2012-11-03
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多