成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

服務(wù)器獲取真實(shí)客戶端 IP

hatlonely / 2816人閱讀

摘要:牢記任何客戶端傳上來(lái)的東西都是不可信的當(dāng)多層代理或使用時(shí),如果代理服務(wù)器不把用戶的真實(shí)傳遞下去,那么服務(wù)器將永遠(yuǎn)不可能獲取到用戶的真實(shí)。

0x01 先查個(gè)問(wèn)題

測(cè)試環(huán)境微信支付通道提示網(wǎng)絡(luò)環(huán)境未能通過(guò)安全驗(yàn)證,請(qǐng)稍后再試,出現(xiàn)這種情況一般首要
想到可能是雙方網(wǎng)絡(luò)交互中微信方驗(yàn)參與我們出現(xiàn)不一致,翻了下手冊(cè)確定是這類問(wèn)題開始排查環(huán)節(jié)

可能獲取真實(shí)IP方式錯(cuò)誤

getenv("HTTP_CLIENT_IP")

getenv("HTTP_X_FORWARDED_FOR")

getenv("REMOTE_ADDR")

filter_var($remote_ip, FILTER_VALIDATE_IP)

已經(jīng)依次獲取并過(guò)濾

固程序沒(méi)有任何問(wèn)題,往上發(fā)散

是否反向代理

經(jīng)過(guò)反向代理后,由于在客戶端和web服務(wù)器之間增加了中間層,因此web服務(wù)器無(wú)法直接拿到客戶端的ip,只能通過(guò)$remote_addr變量拿到的將是反向代理服務(wù)器的ip地址,檢查不存在此類問(wèn)題,再往上,擅長(zhǎng)網(wǎng)絡(luò)通信工程的同學(xué)表示絕不認(rèn)輸

可能NAT分配出口IP,或負(fù)載均衡服務(wù)分發(fā)出現(xiàn)異常

先拿到我本地內(nèi)網(wǎng)外網(wǎng)IP 方便之后問(wèn)題排查

# 本機(jī)IP
ifconfig | grep -A 1 "en" | grep broadcast | cut -d " " -f 2
# 外網(wǎng)IP
curl --silent http://icanhazip.com

檢查與80端口建立連接目標(biāo)都有誰(shuí)

 netstat -tn|grep 80|akw "{print $5}"|awk -F "{print $1}" | grep [本地IP]

這里出現(xiàn)問(wèn)題,竟然沒(méi)有我的IP,再以nginx $remote_addr拿到的IP作為參考,這是nginx最后一次握手的IP,$remote_addr = 10.168.0.0/16

nginx處打印$remote_addr,并在server_name添加當(dāng)前機(jī)器ip,分別以負(fù)載均衡IP與本地IP做測(cè)試,最終確定問(wèn)題出現(xiàn)在負(fù)載均衡服務(wù)器出現(xiàn)異常


0x02 LNMP棧拿真實(shí)IP

LNMP棧內(nèi)PHP所有獲得到的TCP操作信息都是由前面Nginx通過(guò)fastcgi傳遞給它的,就比如$_SERVER["REMOTE_ADDR"]include fastcgi.conf;引進(jìn),其等于nginx$remote_addr

Nginx中的幾個(gè)變量:

$remote_addr

代表客戶端的IP,但它的值不是由客戶端提供的,而是服務(wù)端根據(jù)客戶端的ip指定的,icanhazip的原理也是這樣, 當(dāng)你的瀏覽器訪問(wèn)某個(gè)網(wǎng)站時(shí),假設(shè)中間沒(méi)有任何代理,那么網(wǎng)站的web服務(wù)器就會(huì)把remote_addr設(shè)為你在公網(wǎng)暴露的IP,如果你用了某個(gè)代理,那么你的瀏覽器會(huì)先訪問(wèn)這個(gè)代理,然后再由這個(gè)代理轉(zhuǎn)發(fā)到網(wǎng)站,這樣web服務(wù)器就會(huì)把remote_addr設(shè)為這臺(tái)代理機(jī)器的IP, 除非代理將你的IP附在請(qǐng)求header中一起轉(zhuǎn)交給web服務(wù)器。

$proxy_add_x_forwarded_for

$proxy_add_x_forwarded_for變量包含客戶端請(qǐng)求頭中的"X-Forwarded-For",與$remote_addr兩部分,他們之間用逗號(hào)分開。X-Forwarded-For(簡(jiǎn)稱XFF),X-Forwarded-For 是一個(gè) HTTP 擴(kuò)展頭部。RFC 2616 協(xié)議并沒(méi)有對(duì)它的定義,它最開始是由 Squid 這個(gè)緩存代理軟件引入,用來(lái)表示 HTTP 請(qǐng)求端真實(shí) IP。如今它已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn),被各大HTTP 代理、負(fù)載均衡等轉(zhuǎn)發(fā)服務(wù)廣泛使用,并被寫入 RFC 7239(Forwarded HTTP Extension` 標(biāo)準(zhǔn)之中。

$proxy_set_header

已在排查問(wèn)題中說(shuō)明,可設(shè)置代理后 header

  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;

X-Real-IP

一般比如X-Real-IP這一個(gè)自定義頭部字段,通常被 HTTP 代理用來(lái)表示與它產(chǎn)生TCP 連接的設(shè)備 IP,這個(gè)設(shè)備可能是其他代理,也可能是真正的請(qǐng)求端,這個(gè)要看經(jīng)過(guò)代理的層級(jí)次數(shù)或是是否始終將真實(shí)IP一路傳下來(lái)。(牢記:任何客戶端傳上來(lái)的東西都是不可信的)

當(dāng)多層代理或使用CDN時(shí),如果代理服務(wù)器不把用戶的真實(shí)IP傳遞下去,那么服務(wù)器將永遠(yuǎn)不可能獲取到用戶的真實(shí)IP。
0x03 用戶的真實(shí)IP從何而來(lái)

寬帶供應(yīng)商提供獨(dú)立IP
比如家里電信寬帶上網(wǎng),電信給分配了公網(wǎng)ip,那么一個(gè)請(qǐng)求經(jīng)過(guò)的ip路徑如下:

這種情況下,119.147.19.234 會(huì)把得到的116.1.2.3附加到頭信息中傳給10.168.0.0/32,因此這種情況下,我們?nèi)〉玫挠脩鬷p則為:116.1.2.3
如果119.110.0.0/16沒(méi)有把116.1.2.3附加到頭信息中傳給業(yè)務(wù)服務(wù)器,業(yè)務(wù)服務(wù)器就只能取上上一級(jí)ip地址

寬帶供應(yīng)商不能提供獨(dú)立IP

寬帶提供商沒(méi)有足夠的公網(wǎng)ip,分配的是個(gè)內(nèi)網(wǎng)ip,比如長(zhǎng)寬等小的isp。請(qǐng)求路徑則可能如下:

這種情況下得到的用戶ip,就是211.162.78.1。 這種情況下,就可能出現(xiàn)一個(gè)ip對(duì)應(yīng)有數(shù)十上百個(gè)用戶的情況了

手機(jī)2g上網(wǎng)

網(wǎng)絡(luò)提供商沒(méi)法直接提供ip給單個(gè)用戶終端,以中國(guó)移動(dòng)cmwap上網(wǎng)為例,因此請(qǐng)求路徑可能為:

這種情況下得到的用戶ip,就是202.96.75.1。2008年的時(shí)候整個(gè)廣東聯(lián)通就三個(gè)手機(jī)上網(wǎng)的公網(wǎng)ip,因此這種情況下,同一ip出現(xiàn)數(shù)十萬(wàn)用戶也是正常的。

有幾萬(wàn)或數(shù)十萬(wàn)員工的公司
這種也會(huì)出現(xiàn)來(lái)自同一ip的超多用戶,可能達(dá)到幾萬(wàn)人,但出口IP可能就那么幾個(gè)。


0x04 NAT [Network Address Translation]

中文意思是網(wǎng)絡(luò)地址轉(zhuǎn)換,它允許一個(gè)整體機(jī)構(gòu)以一個(gè)公用IP地址出現(xiàn)在Internet上。

NATOSI參考模型的網(wǎng)絡(luò)層 (第3層), 它是一種把內(nèi)部私有網(wǎng)絡(luò)地址(IP地址)翻譯成合法網(wǎng)絡(luò)IP地址的技術(shù)。NAT可以讓那些使用私有地址的內(nèi)部網(wǎng)絡(luò)連接到Internet或其它IP網(wǎng)絡(luò)上。NAT路由器在將內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)包發(fā)送到公用網(wǎng)絡(luò)時(shí),在IP包的報(bào)頭把私有地址轉(zhuǎn)換成合法的IP地址。

RFC1918 規(guī)定了三塊專有的地址,作為私有的內(nèi)部組網(wǎng)使用

A類:10.0.0.0 — 10.255.255.255 10.0.0.0/8

B類:172.16.0.0 — 172.31.255.255 172.16.0.0/12

C類:192.168.0.0 — 192.168.255.255 192.168.0.0/16

這三塊私有地址本身是可路由的,只是公網(wǎng)上的路由器不會(huì)轉(zhuǎn)發(fā)這三塊私有地址的流量;當(dāng)一個(gè)公司內(nèi)部配置了這些私有地址后,內(nèi)部的計(jì)算機(jī)在和外網(wǎng)通信時(shí),公司的邊界路由會(huì)通過(guò)NAT或者PAT技術(shù),將內(nèi)部的私有地址轉(zhuǎn)換成外網(wǎng)IP,外部看到的源地址是公司邊界路由轉(zhuǎn)換過(guò)的公網(wǎng)IP地址,這在某種意義上也增加了內(nèi)部網(wǎng)絡(luò)的安全性

這個(gè)過(guò)程是通過(guò)NAT中的本地址與全局地址映射條目來(lái)實(shí)現(xiàn)的,所以事先要在NAT路由器上配置這樣的映射條目。


通過(guò)這種方式一個(gè)公網(wǎng) IP 底下可以發(fā)私有的 IP 地址。


0x05 IPV6 來(lái)了?

寫這篇文章的時(shí)候看到有個(gè)推送,表示阿里全面應(yīng)用IPV6,這件事的意義還挺重大的

我們知道,一段 IPv4 標(biāo)準(zhǔn)的 IP 地址,一共由 4 X 8 = 32 位二進(jìn)制數(shù)字組成,理論上存在 2^32 個(gè) IP 地址。等于 4,294,967,296 , 42 億多個(gè) IPv4 的地址。

參考世界互聯(lián)網(wǎng)用戶統(tǒng)計(jì)報(bào)告,全球現(xiàn)在大概有4,208,571,287人在上網(wǎng),也就是說(shuō)已經(jīng)快到ipv4地址設(shè)計(jì)的最大IP數(shù)了

不過(guò)不用擔(dān)心,前面提到的 NAT,讓 IPv4 公網(wǎng) IP 哪怕用完了也能湊合過(guò)。

到了 IPv6 ,相比 IPv4 最大的提升,就是位數(shù)大大增加,變成了 8 個(gè) 4 位的十六進(jìn)制數(shù)字。也就是說(shuō)有 2^128個(gè) IPv6 地址。地球上的每粒沙子都分一個(gè)也管夠

存儲(chǔ)2^128字節(jié)理論上什么概念呢,在當(dāng)今的量子水平下,假設(shè)計(jì)算設(shè)備能夠操作在原子一級(jí),每公斤質(zhì)量可存儲(chǔ)大約10的25次方bits,存儲(chǔ)2的128次方的字節(jié)大約需要272 trillion = 2720000億公斤。

最后,周末愉快,北京聯(lián)通已經(jīng)支持ipv6了,我在望京測(cè)試,可以拿到 ipv6地址

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27623.html

相關(guān)文章

  • 干貨:Java正確獲取戶端真實(shí)IP方法整理

    摘要:但是在通過(guò)了,等反向代理軟件就不能獲取到客戶端的真實(shí)地址了。下面是一個(gè)參考獲取客戶端地址的方法如果使用的是連接池,可以參考使用方法,但這個(gè)是經(jīng)過(guò)多級(jí)代理的地址,需要自己處理下獲取第一個(gè)。 showImg(https://segmentfault.com/img/remote/1460000015379119); 在JSP里,獲取客戶端的IP地址的方法是:request.getRemot...

    felix0913 評(píng)論0 收藏0
  • 務(wù)器獲取真實(shí)戶端 IP

    摘要:牢記任何客戶端傳上來(lái)的東西都是不可信的當(dāng)多層代理或使用時(shí),如果代理服務(wù)器不把用戶的真實(shí)傳遞下去,那么服務(wù)器將永遠(yuǎn)不可能獲取到用戶的真實(shí)。 0x01 先查個(gè)問(wèn)題 測(cè)試環(huán)境微信支付通道提示網(wǎng)絡(luò)環(huán)境未能通過(guò)安全驗(yàn)證,請(qǐng)稍后再試,出現(xiàn)這種情況一般首要 想到可能是雙方網(wǎng)絡(luò)交互中微信方驗(yàn)參與我們出現(xiàn)不一致,翻了下手冊(cè)確定是這類問(wèn)題開始排查環(huán)節(jié) 可能獲取真實(shí)IP方式錯(cuò)誤 getenv(HTT...

    hss01248 評(píng)論0 收藏0
  • 務(wù)器獲取真實(shí)戶端 IP

    摘要:牢記任何客戶端傳上來(lái)的東西都是不可信的當(dāng)多層代理或使用時(shí),如果代理服務(wù)器不把用戶的真實(shí)傳遞下去,那么服務(wù)器將永遠(yuǎn)不可能獲取到用戶的真實(shí)。 0x01 先查個(gè)問(wèn)題 測(cè)試環(huán)境微信支付通道提示網(wǎng)絡(luò)環(huán)境未能通過(guò)安全驗(yàn)證,請(qǐng)稍后再試,出現(xiàn)這種情況一般首要 想到可能是雙方網(wǎng)絡(luò)交互中微信方驗(yàn)參與我們出現(xiàn)不一致,翻了下手冊(cè)確定是這類問(wèn)題開始排查環(huán)節(jié) 可能獲取真實(shí)IP方式錯(cuò)誤 getenv(HTT...

    cpupro 評(píng)論0 收藏0
  • 【全球動(dòng)態(tài)加速 PathX】FAQ:詳細(xì)

    摘要:長(zhǎng)期維護(hù)該內(nèi)核通用源碼包,目前已經(jīng)支持和等絕大多數(shù)的發(fā)行版。選擇的加速區(qū)域在中國(guó)大陸地區(qū)之外,無(wú)論客戶端在哪訪問(wèn)都不需要備案。網(wǎng)站或場(chǎng)景是否可以使用可以使用,全球動(dòng)態(tài)加速支持透?jìng)骰卦?。FAQ加速配置和加速線路的關(guān)系1、帶寬共享功能:一個(gè)加速線路可以被多個(gè)加速配置綁定,這些加速配置共享加速線路的帶寬; 2、一個(gè)加速配置可以綁定多個(gè)加速線路。 3、刪除加速配置不會(huì)影響加速線路,加速線路仍存在...

    Tecode 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<