Django如何获取前端请求的真实IP

REMOTE_ADDR

表示发出请求的远程主机的 IP地址,
remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的
当你的浏览器访问某个网站时,

  • 假设中间没有任何代理,那么网站的web服务器就会把remote_addr设为你的机器IP,
  • 如果你用了某个代理(nginx代理,api网关等),那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP
HTTP_X_FORWARDED_FOR
  • 简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项,正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP
  • 如果存在多级代理,那么x_forwarded_for将会存储多个值,中间用英文逗号隔开 如:‘192.168.2.12,53.33.2.12’。
示例代码
if request.META.get('HTTP_X_FORWARDED_FOR'):
    ip = request.META.get('HTTP_X_FORWARDED_FOR')
else:
    ip = request.META.get('REMOTE_ADDR')
# 当有多级代理时,HTTP_X_FORWARDED_FOR返回多个IP,取第一个即可。
if ip:
    ip = request.split(',')[0]
    
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过Django的视图函数来实现前端按钮点击后对应IP系统执行相关脚本的功能。例如,您可以编写一个视图函数,接收前端传递过来的IP地址和脚本参数,然后使用Python中的subprocess模块来执行相关脚本。以下是一个示例代码: ```python import subprocess from django.http import JsonResponse def run_script(request): ip = request.POST.get('ip') param = request.POST.get('param') # 执行脚本 cmd = f'ssh {ip} /path/to/script.sh {param}' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() if p.returncode != 0: return JsonResponse({'status': 'error', 'message': err.decode()}) return JsonResponse({'status': 'success', 'message': out.decode()}) ``` 在前端页面中,您可以使用jQuery的AJAX来向该视图函数发送POST请求,从而触发脚本的执行。以下是一个示例代码: ```javascript $('#run-btn').on('click', function() { var ip = $('#ip-input').val(); var param = $('#param-input').val(); $.ajax({ url: '/run_script/', type: 'POST', data: {'ip': ip, 'param': param}, success: function(response) { if (response.status === 'success') { alert('脚本执行成功!'); } else { alert('脚本执行失败:' + response.message); } }, error: function() { alert('请求失败!'); } }); }); ``` 当用户点击前端页面上的按钮时,就会向/run_script/这个URL发送POST请求,其中包含IP地址和脚本参数。Django会将这些参数传递给run_script视图函数,并执行相关的脚本。执行成功后,该视图函数会返回一个JSON格式的响应,前端页面会根据这个响应来显示提示信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值