【问题标题】:How do you get the ephemeral port number of a client in ASP .NET?如何在 ASP .NET 中获取客户端的临时端口号?
【发布时间】:2011-11-03 04:34:27
【问题描述】:

我想在 ASP .NET 中通过连接(不是会话状态或 cookie)来跟踪客户端会话。我打算通过使用客户端的 IP 地址和ephemeral port number 来执行此操作。

您可以通过

在 ASP .NET 中获取 IPAddress
  • HttpContext.Current.Request.UserHostAddress
  • HttpContext.Current.Request.ServerVairables["REMOTE_ADDR"]

两者都没有给你回复端口号。有没有其他方法可以得到它?有没有可能?

【问题讨论】:

标签: .net asp.net tcp


【解决方案1】:
HttpContext.Current.Request.ServerVariables["REMOTE_PORT"].
                                                    ^^^^

也许?

【讨论】:

  • 如果您有客户端/服务器设置,要获取客户端基地址,请使用以下命令: // localhost:50899 string clientServer = HttpContext.Current.Request.ServerVariables["HTTP_ORIGIN"];
  • @LeviFuller HTTP 根据定义应该是客户端/服务器,对吧?这个问题/答案不是关于获取基地址的,所以我认为您可能在错误的地方发表了评论。
【解决方案2】:

对于常规的 Web 浏览,您无法真正做到这一点,因为客户端和服务器之间的 HTTP 连接并不长久。

例如 IIS7 指定默认的 120 秒空闲超时,之后连接将被断开。

下次您的浏览器连接到服务器时,“临时”端口号很可能已更改(因为它是随机选择的)。

【讨论】:

  • @brandon - 所以我很感兴趣......如果端口一直在变化,你将如何跟踪会话?
  • 好吧..这是一个诊断工具。我正在此 Web 服务器上创建一个页面,以显示谁已连接以及每个消费者打开了多少个连接。我也想知道他们的交流频率和他们的用户代理。除非 IIS 为我提供了一种查询它管理的连接的方法,否则我只能猜测一个唯一的 IP + 端口组合意味着如果它在过去 120 秒内看到活动则意味着一个单独的连接。
【解决方案3】:

获取当前 HTTP 上下文:
如果您在 MVC 控制器中执行此操作,则可以直接使用控制器的 HttpContext 属性。

var context = HttpContext.Current as IServiceProvider;

接下来,获取 HTTP worker 请求:

var request = context.GetService(
    typeof(HttpWorkerRequest)) as HttpWorkerRequest;

然后你可以像这样获取客户端的临时端口号:

var port = request.GetRemotePort();

【讨论】:

    【解决方案4】:

    这很好用。

    string portNo = HttpContext.Current.Request.ServerVariables["SERVER_PORT"];
    

    你可以访问这个:

    http://www.w3schools.com/asp/coll_servervariables.asp

    【讨论】:

    • 供您参考:我认为您发布的答案与您自己的几乎半年前发布的答案几乎相同而被否决。
    • ...另外,您的答案似乎是关于服务器端口,而不是请求的客户端端口。
    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多