http协议中几个”地址”区分

一.REMOTE_ADDR,X-Forwarded-For,HTTP_CLIENT_IP,X-Real-IP区别

  • REMOTE_ADDR:客户端与服务器连接是的IP地址。如果客户端通过代理访问服务端,在REMOTE_ADDR表示与服务器最近的代理服务器的IP地址;
  • HTTP_CLIENT_IP: 是代理服务器发送的HTTP头。
  • X-Forwarded-For:是一个 HTTP 扩展头部。格式:X-Forwarded-For: client, proxy1, proxy2,由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP。
    如:
    如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:X-Forwarded-For: IP0, IP1, IP2注意列表中并没有 IP3,IP3 可以在服务端通过 REMOTE_ADD字段获得.
  • X-Real-IP:没有相关标准,取值与架构有关。一般也不怎用,更多的使用X-Formarded-For代替。如下
// 最后一跳如果是正向代理,可能会保留真实客户端IP
X-Real-IP: IP0
// 最后一跳如果是反向代理,比如Nginx,一般会是与之直接连接的代理服务器IP
X-Real-IP: IP3

1.1不同架构下几个变量的取值

1)没有使用代理服务器
REMOTE_ADDR = 真实客户端IP
HTTP_X_FORWARDED_FOR = 没数值或不显示

2)使用透明代理服务器
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_X_FORWARDED_FOR = 【您的真实 IP, 代理服务器IP1,代理服务器IP1】时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
ps:这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。

3)使用普通匿名代理服务器
REMOTE_ADDR = 最后一个代理服务器 IP
HTTP_X_FORWARDED_FOR = 【代理服务器IP1,代理服务器IP2】时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
ps:隐藏了真实IP

4)使用欺骗性代理服务器
REMOTE_ADDR = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 【随机IP, 代理服务器IP1,代理服务器IP2】时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。
ps:告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它

5)使用高匿名代理服务器
REMOTE_ADDR = 代理服务器 IP
HTTP_X_FORWARDED_FOR = 没数值或不显示
ps:完全用代理服务器的信息替代了您的所有信息,就象您就是完全使用那台代理服务器直接访问对象

1.2.如何获取客户端的真实IP

总的思路主要还是通过X-Forwarded-For来获取客户端真实IP。不同web服务器,不同架构可能实现方式有些不一样。
有篇比较好的文章,觉得写的挺好,可以参考:https://huaweicloud.blog.csdn.net/article/details/107567634

假设访问链路:clent–>proxy1–>proxy2–>proxy3–>nginx–>app server
在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client 的IP被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1的IP被添加到XFF中,表示代理proxy1z转发的请求;之后请求被发往proxy3,通过proxy3时,proxy2的IP被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。

特别注意
HTTP_X_FORWARDED_FOR头伪造起来非常容易,所以在尝试使用X-Forwarded-For获取客户端真实IP地址时,要谨慎。不过。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址, 这通常是一个比较可靠的信息来源

比如使用代码就可以很方便的伪造X-Forwarded-For

import sys, httplib, random
params = "value=xxx"
ipAddress = "10.200.0."+random(1,254)
headers = { "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Encoding":"gzip, deflate", "Accept-Language":"zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3", "Connection":"keep-alive", "X-Forwarded-For":ipAddress, "Content-Length":"31", "Content-Type":"application/x-www-form-urlencoded", "User-Agent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0" }
con2 = httplib.HTTPConnection("192.168.0.100") 
try: 
	con2.request("POST", "/xxx.php", params, headers) 
    r2 = con2.getresponse() 
    print r2.read() 
except Exception, e: 
	print e 
    sys.exit(1)
### 回答1: IP地址和MAC地址是两个不同的地址,用于标识网络设备的身份。 IP地址(Internet Protocol address)是一个数字地址,用于在网络标识计算机。它是一个32位或128位的数字,表示网络的一个节点。IP地址可以分为两种:内部IP地址和公共IP地址。内部IP地址在私人网络使用,公共IP地址在互联网上使用。 MAC地址(Media Access Control address)是一个48位的数字,用于标识网络设备的物理地址。它是一个硬件地址,不会随着设备的移动而改变。因此,MAC地址可以用于标识网络设备的唯一身份。 总的来说,IP地址与MAC地址有以下不同: - IP地址是一个数字地址,用于在网络标识计算机;而MAC地址是一个硬件地址,用于标识网络设备的物理地址。 - IP地址可以改变,但MAC地址是不变的。 - IP地址是用于网络通信的,而MAC地址是用于以太网通信的。 ### 回答2: IP地址和MAC地址是计算机网络两种不同的地址标识符。 首先,IP地址是用于在网络唯一标识设备的一串数字。它是由32位二进制数字组成,通常以四个十进制数字表示,间用点号分隔。IP地址是在网络层使用的,它允许数据在网络进行路由和传输。IP地址是由网络管理员分配和管理的,可以根据需要进行更改。IP地址可通过网络协议和服务(例如DHCP)自动配置,也可以手动配置。总之,IP地址是用于标识设备在网络位置的逻辑地址。 而MAC地址(介质访问控制地址)是硬件设备上的一个唯一的物理地址。它是由网络适配器(网卡)制造商在生产时给予的,由12位十六进制数字组成,通常用冒号分隔。MAC地址是在数据链路层使用的,它用于在局域网唯一标识网络适配器。MAC地址是固定的,不会改变,用于设备之间直接通信,而不需要经过路由器。每台设备上的每个网络接口都有一个唯一的MAC地址,无论它连接到哪个网络。总之,MAC地址是用于标识设备在局域网内的物理地址。 因此,IP地址和MAC地址在计算机网络扮演着不同的角色和功能。IP地址用于在网络层确定设备的位置和传输数据的路由,而MAC地址用于在数据链路层唯一标识设备的物理地址。 ### 回答3: IP地址和MAC地址网络用于唯一标识设备的两个不同的地址类型。 首先,IP地址是指互联网协议地址,它是给互联网上的设备分配的一串数字。IP地址包括两个部分,网络部分和主机部分,用于在网络识别设备的位置。IP地址具有层次性,可以根据子网掩码将网络划分为不同的子网。IP地址是轻松更换的,可以通过配置网络接口或连接到不同网络来更改设备的IP地址。 其次,MAC地址是指媒体访问控制地址,它是由网络接口卡(NIC)厂商分配的硬件地址。每个设备都有唯一的MAC地址,它是由48位二进制数组成的,通常被表示为十六进制数字和冒号分隔符的形式。MAC地址是设备固定的,通常在出厂时被分配并烧录到设备的物理存储器。MAC地址用于在本地网络(如局域网)直接识别设备,并且不会随着设备移动到不同的网络而改变。 因此,IP地址和MAC地址可以通过以下几个方面来区分: 1. IP地址是由网络管理员或网络服务提供商分配给设备的,而MAC地址是由设备制造商分配的。 2. IP地址是软件可配置的,可以更改,而MAC地址是硬件固定的,无法更改。 3. IP地址是用于路由和寻址,它在互联网被路由器用来传输数据,而MAC地址是用于在本地网络直接识别设备。 4. IP地址具有层次性,可以通过子网划分进行管理,而MAC地址没有层次性,是唯一的标识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值