在Windows计算机上选择TCP端口,必要时(以编程方式)添加防火墙例外?

时间:2014-08-21 10:11:02

标签: c++ windows sockets tcp firewall

感谢您阅读我的帖子。

你能帮我解释一下以下这行来自" netstat -anb"的意思是:

Proto Local Address Foreign Address State TCP 192.168.2.241:52440 64.233.166.103:443 ESTABLISHED [firefox.exe]

特别是:

  • 这是否意味着在IP为192.168.2.241的机器上打开了TCP端口52440?
  • 这是否意味着" firefox.exe"这个港口绑定了吗?

你能猜出" firefox.exe"知道它可以使用这个端口(不干扰已绑定到该端口的另一个程序)?

事实上," firefox.exe"正在使用很多端口。 例如,现在在192.168.2.241," firefox.exe"正在使用ports nro 52163,57019,57022,57030,57045,57046,57049,57051。

我问这一切是因为我想编写一个绑定到TCP端口的程序,以便在安装程序的机器和使用套接字的Internet上的远程机器之间进行通信。

与#34; Firefox"相反我只需要安装程序的机器上的一个TCP端口。

我只需要这个机制工作一次,第一次执行程序(这不是程序的永久功能)。

  • 如何选择此端口?
  • 如何以编程方式(非手动)选择此端口?
  • 如果防火墙阻止使用任何端口/所选端口,程序将如何运行?
  • 是否可以通过编程方式将异常添加到防火墙以打开此端口?

运行程序的机器是Windows机器。

我会用C / C ++编程。

最好的问候。

以下是对我原始问题的补充。

嗯,道歉,也许你是对的:在用户的防火墙中添加例外也许是错的... 我的意思是"在用户的防火墙中添加例外"正在做这样的事情:

netsh advfirewall firewall add rule name="An exn" dir=in action=allow protocol=TCP localport=6667 program="where/the/program/is/stored/prog.exe" enable=yes

直到现在,我认为,如果一个应用程序已经"使用"一个TCP端口供自己使用,没有其他应用程序可以使用"这个港口非常相同。 (我意识到"使用"这个词是非常不精确的。我很高兴能够更准确地制定东西...) 我这样说是因为,因为我需要一个TCP端口,所以我想知道我是否可以使用"已经可用的" TCP端口......(当我说"已经可用",我不知道我的意思(也许我想说"打开"和#34;可绑定的" /或已经被另一个应用程序使用的端口#34;我正在考虑TCP端口80,这通常是#34;可用" ...再次,我希望我可以对此更加具体。)

请让我尝试重新制定我愿意做的事情。

  1. 用户运行程序" setup.exe"在它的机器上" M"。
  2. " SETUP.EXE"发送消息" m1"到互联网远程服务器" RS"。
  3. " RS"发回一些信息" m2"到" setup.exe"在机器上运行" M"通过TCP端口。
  4. 能够在" M"之间进行这种双向通信。和" RS",我需要"有"机器上的TCP端口" M"从哪个" setup.exe"可以接收" RS"发送的信息。 (" RS"对我来说不是问题,我可以做任何我想做的事。)

    鉴于我对" M"除了事实上它是Windows机器(特别是我不知道什么样的防火墙保护它等)之外,我还不知道如何正确处理问题。我想避免的是" setup.exe"无声地失败而没有告诉为什么机器上的TCP端口" M"不能"使用"。

    鉴于我需要有一个可用的TCP端口"对于程序" setup.exe"在机器M上运行,我应该遵循哪些步骤,以使用户尽可能顺利。

    假设我试图"使用" TCP端口6667,并假设我没有"允许"至。 除了防火墙或其他应用程序已经"使用"这个端口,这个端口不可用的原因是什么?

    我模拟了两台机器" M"和" RS"基本上使用此代码http://msdn.microsoft.com/en-us/library/windows/desktop/ms737889%28v=vs.85%29.aspx

    • 我没有在" M"防火墙上添加例外。
    • 机器上的两个程序" M"和" RS"可以顺利和正确地沟通。
    • 但正如您在第一个答案中指出的那样,"防火墙中根本没有出站端口规则"在这些试验机上......
    • 因此,作为模拟,我尝试在“"出站规则"”部分中向M&#39防火墙添加例外。完全阻止与机器上的端口TCP 6667的连接" M":上述情况(步骤1)2)3))在这种情况下失败。

    我希望这些文献不会过于难以消解,对于近似和误解感到抱歉。

    感谢您的帮助。最好的问候。

1 个答案:

答案 0 :(得分:-1)

  

这是否意味着在IP为192.168.2.241的机器上打开了TCP端口52440?

可能,但更可能意味着防火墙中根本没有出站端口规则,因为它不应该是没有意义的。

  

这是否意味着" firefox.exe"是绑定到这个端口?

这意味着 firefox.exe的套接字绑定到该端口。它可以有许多其他套接字,通常也可以。

  

我想编写一个绑定到TCP端口的程序,以便在安装程序的机器和使用套接字的Internet上的远程机器之间进行通信。

您需要说明您的程序是客户端还是服务器。如果它是客户端,它就像Firefox一样,并且您没有问题。如果它是服务器,则必须绑定到防火墙中打开的端口,而Firefox完全无关紧要。

  

与#34; Firefox"相反我只需要安装程序的机器上的一个TCP端口。

听起来像服务器,但你需要告诉我们。为简单起见,我假设它是来自这里的服务器。

  

我只需要这个机制工作一次,第一次执行程序(这不是程序的永久功能)。

你根本不需要这种机制。您需要用户打开端口。用户不会喜欢破坏他的防火墙配置的软件,假设你可以做到这一点,你不应该这样做。

  

如何选择此端口?

由你。现在就选择它。使用IANA未预留的内容。

  

如何以编程方式(非手动)选择此端口?

您可以指定端口0,但是您必须告诉用户,以便他可以在防火墙处打开它。

  

如果防火墙阻止使用任何端口/所选端口,程序将如何运行?

传入连接不会成功,因此程序将不执行任何操作。

  

是否可以通过编程方式将异常添加到防火墙以打开此端口?

不知道,但这是一个坏主意,见上文。