如何在Python中获取远程IP地址?在Python中获取远程IP地址
我试过搜索Google,但找不到任何有用的结果。 os.environ['REMOTE_ADDR']
给出KeyError: 'REMOTE_ADDR'
如何在Python中获取远程IP地址?在Python中获取远程IP地址
我试过搜索Google,但找不到任何有用的结果。 os.environ['REMOTE_ADDR']
给出KeyError: 'REMOTE_ADDR'
您正在访问操作系统的os
环境,而不是request
的。
WSGI可调用应该通过两个变量,environ
和start_response
,并且environ
变量将具有您要查找的变量。
如果您运行的是CGI
应用程序,那么这些变量只会出现在实际的os.environ
中。
根据您使用的Web框架,您可能无法访问此功能。如果您通过了request
对象,则这可能会以request.META
或类似的方式结束。
如果您没有使用任何框架,那将在the environ
dict that is passed to your wsgi callable。
正如另一个答案指出,REMOTE_ADDR
不有是他们按照规范,但如果你使用Apache的mod_wsgi
,它应该有。
另外值得一提的是,'REMOTE_ADDR'可能是转发器的地址,如果你的安装程序有任何Web应用程序防火墙,处理请求(如nginx)或其他此类设置的代理。在这种情况下,它也值得检查“HTTP_X_FORWARDED_FOR”的存在 –
如果您有权访问TCP套接字,则可以使用socket.getpeername()
来获取远程地址。 Docs are here.
@AshwiniChaudhary:那是错误的。他希望连接到他的网络应用程序的客户端的IP地址,而不是运行其应用程序的服务器的IP地址。 – Cairnarvon
你的堆栈是什么样的? –
@ThomasOrozco Debian,Apache 2.2和Python 2.7 –