如何在Django中检索远程端口

时间:2013-12-01 19:14:41

标签: django webserver httprequest webservice-client

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

增加:

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

现在在HttpRequest meta dict中,我无法看到它。还有其他办法吗?

3 个答案:

答案 0 :(得分: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堆栈的应用层访问源端口。

答案 1 :(得分:0)

仅使用Django似乎不可能,但是如果您在Apache和mod_wsgi之上运行它,则可以通过request.META['REMOTE_PORT']

从请求对象访问它

https://github.com/GrahamDumpleton/mod_wsgi

答案 2 :(得分:0)

I also proposed the similiar question with no satisfying answers.最后,经过几天的挣扎,我回答了一个问题,一个工作但很丑陋的解决方案关于“如何在Django中获取客户端端口”。任何人都看到这一点,请帮助我改进这种方法。

    你的python26 / Lib / SocketServer.py中的
  1. ,找到def process_request_thread,添加 global gClientPort; gClientPort = client_address

  2. 在yout项目中使用此全局值。例如,它的格式是('12 .34.56.78',55437)。 55437是端口号。