代码之家  ›  专栏  ›  技术社区  ›  kerox___m

如何设置特定源端口

  •  -1
  • kerox___m  · 技术社区  · 7 年前

    我用的是Spring的 RestTemplate 类从组织外部的web服务获取XML。

    由于本地防火墙规则的更改,我需要在HTTP请求中指定特定的源端口。现在我在 api ,或任何有关如何执行此操作的教程。

    这不可能吗?

    更一般地,在联机描述中,我发现使用特定的源端口通常是通过基于UDP的连接/应用程序完成的。这是TCP通常不做的事情吗?

    (我真的不认为这有什么帮助,但下面是一段代码片段,正如下面的评论员所问的那样):

    MyRequest request = new MyRequest(); //whole thing done via jackson
    RestTemplate templ = new RestTemplate();
    this.serviceUrl = String.format("%s:%d", properties.getServiceUrl()
    properties.getServicePort());
    ExptectedResponse response = templ.postForObject(serviceUrl, request, ExptectedResponse.class);
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Community CDub    3 年前

    TCP连接的源端口从临时端口范围49152-65535中随机选择。TCP端口范围如下所示: RFC 6056 - Ephemeral Ports

    “IANA定义的动态端口范围包括49152-65535 范围,用于选择临时端口。"

    端口选择过程因所使用的操作系统而异。这比典型的Java应用程序低得多,因此超出了应用程序的控制范围。

    从技术上讲,您可以强制操作系统选择指定的端口,但正如我所提到的,这是特定于操作系统的,破坏了Java应用程序的经典可移植性。有一篇关于超级用户的帖子谈到了这个话题 here .

    我建议与更改防火墙的部门联系,看看他们是否可以允许正常端口范围的出站连接。