获取Python中的客户端地址

-1 投票
2 回答
1750 浏览
提问于 2025-04-18 13:50

我的问题是:我用Python创建了网页(里面有HTML代码),每个页面都有一个按钮可以跳转到下一个页面。 请问,在提交HTML表单时,有没有办法获取客户端的地址呢? 我的意思是,能不能把客户端的地址放到URL里。

如果可以的话,我会展示我的代码,否则我就删掉我的问题。

这是我的HTML代码:

ip = cgi.escape(os.environ["REMOTE_ADDR"])

<html>

path install: ${install_path}<br/><br/>

os: ${os}<br/><br/>

unix user: ${user_name}<br/><br/>

<form name="sd" method="get" action="ip/cgi/scriptGet.py">
    Name: <input type="text" name="name"><br/><br/>
    Pseudo: <input type="text" name="pseudo"/><br/><br/>
    <input type="submit" value="OK"/>
</form>

这是我的Python代码:

import os, sys, platform, getpass, tempfile
import webbrowser
import string
import json
import cgi, cgitb, os   

def main( server_IP,install_path):

  template = open('scriptHmtl.phtml').read()

  contenu = string.Template(template).substitute(
            install_path = install_path,
            os = user_os,
            user_name = user_login
            )

if __name__ == "__main__":
  server_IP = sys.argv[1]
  install_path = sys.argv[2]

main(server_IP,install_path)

2 个回答

0

客户端的IP地址(我想你说的“客户端地址”就是指这个)是在TCP/IP层面上传递给你的服务器的。如果你使用的是CGI(根据你评论中的一些信息来看,似乎是这样),那么这个地址应该可以在CGI脚本的环境中找到,变量名是REMOTE_ADDR(具体可以参考http://www.ietf.org/rfc/rfc3875,第4.1.8节)。在Python中,访问环境变量的方法是用os.environ(可以查看https://docs.python.org/2/library/os.html#os.environ)。

需要注意的是,因为CGI脚本可以访问这个地址,所以你不需要把它添加到URL、查询字符串或者(在POST或PUT请求的情况下)请求的主体中。

另外,如果你的服务器是通过代理、负载均衡器等访问的,REMOTE_ADDR可能不是实际的客户端IP,这时你需要查看HTTP请求的头部,找找是否有X-Forwarded-For这个头部,具体可以参考http://en.wikipedia.org/wiki/X-Forwarded-For。这个头部(如果存在的话)应该可以像REMOTE_ADDR或其他请求头一样访问,但可能会被重命名为HTTP_X_FORWARDED_FOR,具体可以参考http://www.ietf.org/rfc/rfc3875.txt的第4.1和4.1.18节。

0

你可以使用 cgiREMOTE_ADDR,用法如下:

cgi.escape(os.environ["REMOTE_ADDR"])

把这个放到一个变量里,然后在你的 HTML 表单的操作中调用这个变量……

撰写回答