2011-08-24 88 views
4

我想在ASP .NET中通过连接(而不是会话状态或cookie)跟踪客户端会话。我打算通过使用客户端的IP地址和ephemeral port number来做到这一点。如何在ASP .NET中获得客户端的临时端口号?

您可以通过

  • HttpContext.Current.Request.UserHostAddress
  • HttpContext.Current.Request.ServerVairables["REMOTE_ADDR"]获得ASP .NET中的ip地址。

这两个都不给你答复的端口号。有没有另一种方法来获得它?它甚至有可能吗?

+2

'REMOTE_PORT',也许? –

+0

@Marc B,这看起来很有希望......你应该把它作为答案发布。 http://msdn.microsoft.com/en-us/library/ms524602%28v=vs.90%29.aspx –

+0

嘿,whaddhaya知道。我只是在黑暗中进行狂野的刺...一个答案,马上就来。 –

回答

8
HttpContext.Current.Request.ServerVariables["REMOTE_PORT"]. 
                ^^^^ 

也许?

+0

我不认为这会起作用,所以我没有尝试。谢谢! –

+0

如果您有客户端/服务器设置,要获取客户端基址,请使用以下内容: // http:// localhost:50899 string clientServer = HttpContext.Current.Request.ServerVariables [“HTTP_ORIGIN”]; –

+0

@LeviFuller HTTP应该是每个定义的客户端/服务器,对吧?这个问题/答案不是获取基地址,所以我认为您可能已将您的评论发布在错误的地方。 – Zero3

1

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

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

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

+0

这对我的目的没关系。 –

+0

@brandon - 所以我很感兴趣....如果端口一直在变化,你将如何跟踪会话? – Kev

+0

那么..这是一个诊断工具。我正在这个Web服务器上创建一个页面,以显示谁连接了以及每个客户打开了多少个连接。我也想知道他们的沟通频率和他们的用户代理。 除非IIS给我一种查询它管理的连接的方法,否则我会猜测一个独特的IP +端口组合意味着一个单独的连接,如果它在过去的120秒内看到了活动。 –

-2

这很好。

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

您可以访问此:

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

+0

对于您的信息:我认为你发布了一个答案,几乎与你自己发布前差不多半年的答案相同。 – Zero3

+0

...另外,您的答案似乎是关于服务器端口,而不是请求的客户端端口。 – Zero3

1

获取当前HTTP上下文:
如果你在一个MVC控制器,这样,您就可以,而不是直接使用控制器的HttpContext财产。

var context = HttpContext.Current as IServiceProvider; 

接下来,让HTTP工作要求:

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

然后你就可以得到客户的临时端口号是这样的:

var port = request.GetRemotePort();