【问题标题】:How to retrieve remote port in Django如何在 Django 中检索远程端口
【发布时间】:2013-12-01 19:14:41
【问题描述】:

我正在编写一个 Web 服务器脚本,需要客户端连接的远程端口。有什么办法可以找回吗?我正在使用 django 框架进行开发。

添加:

当客户端发送 HTTP 请求时,机器上会有一个源 TCP 端口,在 NAT 过程中会被修改。最后,到 Web 服务器的 SYN (TCP) 将来自端口 P1。我需要 Web 服务器从中接收连接请求的端口 P1。

现在在 HttpRequest 元字典中,我看不到它。有没有其他办法?

【问题讨论】:

  • 不清楚你在问什么。端口应该始终相同,即80,因为这是http 请求的默认端口。 https 也有 443。您应该阅读以下内容:docs.djangoproject.com/en/dev/ref/request-response
  • 虽然 80/443 是用于面向公众的网站的标准端口,但有时它们不会被使用。立即想到的几个案例是在开发环境中或在您的 ISP(即 Cox)阻止端口 80 的非商业环境中设置 Web 服务器。
  • 我想知道发送HTTP请求的客户端端口(可能是客户端网络端网关的端口)。

标签: django webserver httprequest webservice-client


【解决方案1】:

目标(服务器)端口包含在request's meta dictionary 中。

def get_port(request):
    if 'SERVER_PORT' in request.META:
        return request.META['SERVER_PORT']
    else:
        return None

在 TCP/IP 堆栈的应用层将无法访问源端口。

【讨论】:

  • 如果我错了,请纠正我,但我认为您总能在 request.META 中找到 SERVER_PORT 值。对吗?
  • @alix 老实说,我不确定它是否得到保证。如果您是正确的,那么可以删除条件语句,但我倾向于谨慎行事。
  • 知道了。我也不确定 100%。这就是为什么我说'如果我错了,请纠正我'。如果我弄清楚了,会告诉你:)
  • 我想知道发送HTTP请求的客户端端口(可能是客户端网络端网关的端口)。
  • 当客户端连接到服务器时,它会指定目标端口。目标端口是服务器正在运行的端口,而源端口是客户端打开的端口(如果在 NAT 之后,则对应的端口)@Rajat 希望知道这个端口。
【解决方案2】:

这似乎只用 Django 是不可能的,但是如果你在 Apache 和 mod_wsgi 上运行它,你可以通过request.META['REMOTE_PORT']从请求对象访问它

https://github.com/GrahamDumpleton/mod_wsgi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2010-09-12
    • 2014-05-19
    • 2012-03-05
    相关资源
    最近更新 更多