python获取客户端ip_各种脚本语言获取客户端真实IP的方法

各种语言获取客户端真是ip的方法

1.PHP脚本获取客户端真实ip的方法

整体思路:需要依次检查HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、REMOTE_ADDR这三个是否

存在,只要一旦有一个存在就结束

获取示例代码:

function GetIP(){

if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

$ip = getenv("HTTP_CLIENT_IP");

else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

$ip = getenv("HTTP_X_FORWARDED_FOR");

else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))

$ip = getenv("REMOTE_ADDR");

else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

$ip = $_SERVER['REMOTE_ADDR'];

else

$ip = "unknown";

return($ip);

}

其中对获取ip的三个属性HTTP_VIA、HTTP_X_FORWARDED_FOR、REMOTE_ADDR在使用代理服务器时获取的情况

一、没有使用代理服务器的情况:

REMOTE_ADDR = 自己的真实IP

HTTP_VIA = 没数值或不显示

HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用Transparent Proxies(透明代理)服务器的情况

REMOTE_ADDR = 最后一个代理服务器IP

HTTP_VIA = 代理服务器IP

HTTP_X_FORWARDED_FOR = 自己的真实IP

三、使用Anonymous Proxies(匿名代理)服务器的情况

REMOTE_ADDR = 最后一个代理服务器IP

HTTP_VIA = 代理服务器IP

HTTP_X_FORWARDED_FOR = 代理服务器IP

四、使用Distorting Proxies(欺骗代理)服务器的情况:

REMOTE_ADDR = 代理服务器IP

HTTP_VIA = 代理服务器IP

HTTP_X_FORWARDED_FOR = 随机IP,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

五、使用Elite Proxies服务器的情况

REMOTE_ADDR = 代理服务器IP

HTTP_VIA = 没有数值或不显示

HTTP_X_FORWARDED_FOR = 没有数值或不显示,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。

综上来看,PHP获取客户端真实IP的方法并不是能够百分之百成功的。

2.ASP脚本获取客户端真实ip的方法

获取的思路和PHP脚本的类似,也是通过判断HTTP_X_FORWARDED_FOR、REMOTE_ADDR来获取的

但是由于客户端使用代理服务器缘故,并不能保证100%能够获取客户端真实ip

Private Function getIP()

Dim strIPAddr

If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then

strIPAddr = Request.ServerVariables("REMOTE_ADDR")

ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then

strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)

ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then

strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)

Else

strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

End If

getIP = Trim(Mid(strIPAddr, 1, 30))

End Function

3.C#获取客户端真实ip的方法

获取函数的思路类似,见如下代码:

public static string GetIPAddress()

{

string user_IP = string.Empty;

if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)

{

if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)

{

user_IP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();

}

else

{

user_IP = System.Web.HttpContext.Current.Request.UserHostAddress;

}

}

else

{

user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

}

return user_IP;

4.Java获取客户端真实ip的方法

package com.viathink.utils;       //需要的Java包

import javax.servlet.http.HttpServletRequest ;   //导入方法

public static String getIpAddr(HttpServletRequest request) {

String ip = request.getHeader("X-Forwarded-For");

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("WL-Proxy-Client-IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("HTTP_CLIENT_IP");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getHeader("HTTP_X_FORWARDED_FOR");

}

if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

ip = request.getRemoteAddr();

}

return ip;

}

}

5.Python获取客户端真实ip的方法

代码如下:

def get_client_ip(request):

try:

real_ip = request.META['HTTP_X_FORWARDED_FOR']

regip = real_ip.split(",")[0]

except:

try:

regip = request.META['REMOTE_ADDR']

except:

regip = ""

return regip

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值