如何获取 Django 项目中的客户端端口号?

How do I get the client port number in a Django project?

我正在使用 django 构建我的网络服务器,其他人作为客户端连接到我。现在我需要知道客户端的端口号来区分它们。如果他们的浏览器打开两个'Tabs'相同的link,即两个页面但相同link,我也必须区分它们。

虽然我知道我可以在我的django视图函数中使用request.META['REMOTE_ADDR']来获取客户端的IP,但这还不够对我来说。

然后我研究了一些TCP/IP基础知识,然后我知道在TCP/IP层,每个IP数据包都有一个IP头,其中包含客户端的端口号。但是我怎样才能在 django 中访问它呢?

附加信息:

  1. 您关于 'every user connection opens connection at unique port' 的假设是错误的。所有用户都使用相同的端口进行连接。
  2. 为了区分用户,Django(以及几乎所有其他框架)正在使用会话。每个用户都会得到一个带有其唯一会话 ID 的 cookie,这个 cookie 会在每次连接时传递到服务器,因此应用程序可以区分用户。

这是关于会话的文档:

https://docs.djangoproject.com/en/1.8/topics/http/sessions/

是的,经过几天的努力,我在 'how to get client port in Django'.

上用一个有效但丑陋的 解决方案 回答了这个问题
  1. 在你的python26/Lib/SocketServer.py中,找到def process_request_thread,添加 global gClientPort; gClientPort = client_address

  2. 在您的项目中使用这个全局值。例如,它的格式是 ('12.34.56.78',55437)。 55437是端口号。

当我调试 django 时,我发现了这个

request.environ["wsgi.input"].raw._sock.getpeername()

也许可以