2013-06-02 166 views
0

如何在Python中获取远程IP地址?在Python中获取远程IP地址

我试过搜索Google,但找不到任何有用的结果。 os.environ['REMOTE_ADDR']给出KeyError: 'REMOTE_ADDR'

+2

@AshwiniChaudhary:那是错误的。他希望连接到他的网络应用程序的客户端的IP地址,而不是运行其应用程序的服务器的IP地址。 – Cairnarvon

+0

你的堆栈是什么样的? –

+0

@ThomasOrozco Debian,Apache 2.2和Python 2.7 –

回答

2

您正在访问操作系统的os环境,而不是request的。

WSGI可调用应该通过两个变量,environstart_response,并且environ变量将具有您要查找的变量。

如果您运行的是CGI应用程序,那么这些变量只会出现在实际的os.environ中。


根据您使用的Web框架,您可能无法访问此功能。如果您通过了request对象,则这可能会以request.META或类似的方式结束。

如果您没有使用任何框架,那将在the environ dict that is passed to your wsgi callable

正如另一个答案指出,REMOTE_ADDR是他们按照规范,但如果你使用Apache的mod_wsgi,它应该有。

+0

另外值得一提的是,'REMOTE_ADDR'可能是转发器的地址,如果你的安装程序有任何Web应用程序防火墙,处理请求(如nginx)或其他此类设置的代理。在这种情况下,它也值得检查“HTTP_X_FORWARDED_FOR”的存在 –

2

如果您有权访问TCP套接字,则可以使用socket.getpeername()来获取远程地址。 Docs are here.