假設我現在有一隻API,簡稱在A主機上
當對方從B主機POST資料給我時
我有辦法知道B的「HOST IP」嗎?
我目的是很像金流的白名單
我可以在A透過某種PHP獲取打過來的B主機 HOST IP?
(不是使用者IP)
(更新問題)
其實, 我聽不懂樓主想問甚麼?
綜整樓主的資訊如下:
當對方POST資料給我
我不是指使用者IP,我是指對方瀏覽的網站的那個主機
假設上面兩句中:
對方=A
我的主機=B
對方瀏覽的網站那個主機=C
那麼第一句的情境是:
A POST 資料給 B
但是第二句的情境是:
A 瀏覽網站 C
請問:
如果 A 正在瀏覽 C 網站,
他又如何能同時 POST 資料給 B?
兩個情境描述互相矛盾, 後面的問題就很難有答案...
我要知道C的HOST IP,我在API那台主機做事就行
你的回答還是不夠清楚;
請試著回答以下的問題:
你要的狀況是上面的 1 或是 2?
對方A
程式主機B
API主機C
A瀏覽B時,B會有個程式打API到C
我C想要知道B的主機HOST IP
這樣終於清楚了...
答案是:
雖然 A 的瀏覽器在連上 B 的時候, 會把他自己的 IP 傳遞給 B....但是....
B 在呼叫 C 的 API 時, 只會將 B 自己的 IP 傳遞給 C, 把 A 的 IP 丟棄...
如果你想取得 A 的 IP, 必須在 API 裡面增加一個欄位來傳遞 A 的 IP, 同時請 B 修改程式, 事先儲存每一個由 A 傳來的 IP, 而且在呼叫 C 的時候, 把 A 的 IP 放進 API 的欄位內傳給 C.
如果中間的 B 不幫忙處理, C 無法拿到 A 的 IP.
順帶一提:
金流鎖白名單都是鎖 B 的 IP, 沒人會去鎖 A 的 IP...
原來老大也會教國文
太棒了 XD
我不要A的IP
我要B的主機HOST IP
當B打API到我的C時
我C能抓到B的HOST IP這樣
(我沒有要A的任何東西)
B 在呼叫 C 的 API 時, 只會將 B 自己的 IP 傳遞給 C, 把 A 的 IP 丟棄...
對,我就是要B的IP
如果你想取得 A 的 IP, 必須在 API 裡面增加一個欄位來傳遞 A 的 IP, 同時請 B 修改程式, 事先儲存每一個由 A 傳來的 IP, 而且在呼叫 C 的時候, 把 A 的 IP 放進 API 的欄位內傳給 C.
如果中間的 B 不幫忙處理, C 無法拿到 A 的 IP.
不需要A的任何東西
(抱歉前面誤會您的回答, 下面重新來過)
那就要看你的 C 是用甚麼軟體寫的?
如前面大家回答的, C 的 Web Server 軟體, 會將 Remote Address 這個 HTTP Header 傳遞給你自己寫的軟體, 但是要如何取出這個 IP? 得先看你是用哪一種軟體? 才知道相對應的語法是甚麼?
追蹤到此, 已經很明確的答案有:
我是用 PHP
那就很容易辦, 這裡有很多解答可以參考:
Google: php get remote ip
唉,讓大神來教你國文解釋。嘖嘖
我只告訴你一個重點就行了。
所謂取得來源點ip。就是看哪台主機來連你的主機。
今天如果是a連過來的,你c就是取到a主機。
如果是b主機連過來的,你c取到的就是b主機的ip。
a連到b透過b來連線到c。讓對c來說就是b來連接。所以取到b的ip。
這樣有很難理解嘛?
來源ip來源ip。
如果你是要a連過來b後,用b來連接c。但想從c取到a的ip,這才是最難的。
因為你能取到的只有b傳過來的資料。除非b有幫你傳(這又得討論到proxy或是cdn的事了)
也就是說,看誰來對你的主機連線。你就是取他的ip。
這樣不難理解吧?
這個我就要開罵了。
就算不懂也得學會用google吧。
這樣子的東西,google查一大堆寫法。
為何還要來這裏問。
這次不給你程式碼,給你關鍵字自已去研究 「php 取得來源ip」
這問題害我都不好意思用回答了
那就來討論看看其他的問題
1 .
對方不需要帶HOST IP給我
對方沒得選
他在發送 http request 時
就會帶相關的 header 給你
我的理解
當然
這東西也很容易偽造
所以你得到或許不是你要的
你真要做類似白名單的驗證
與其去驗證 ip
還不如用 jwt 之類的 token 還更有用
疑?連這個也可以偽造?
我不是指使用者IP,我是指對方瀏覽的網站的那個主機
主要是白名單的功用,偽造那他就是沒辦法通過我這裡,偽造機率應該很低吧,就很像是金流的白名單
金流驗證很多都改用 token 或者 key 來驗證了吧
其實取來源ip判斷,的確是只防君子不防小人。
一般我還是會取ip先做優先判斷。確定能過才做檢查token。
而且認真來說,REMOTE_ADDR是無法偽照的。(雖然,還是可以透過其它方式來處理)
dragonH:我看TAPPAY還是會有一個白名單機制,登記你服務的那台HOST
【對方主機】連線到【你的主機】來詢求 API,
這個運作的狀態下,
【對方主機】跟【你的主機】的關係,
就是【使用者】與【伺服器】的關係,
所以你在【你的主機】直接執行取得【使用者 IP】 的方法,
就會直接拿到【對方主機 IP】了。
<?
print($_SERVER['HTTP_CLIENT_IP']. '<br>');
print($_SERVER['HTTP_X_FORWARDED_FOR']. '<br>')
print($_SERVER['REMOTE_ADDR']. '<br>')
//主機之間若是直連,請取用
print($_SERVER['REMOTE_ADDR']. '<br>')
?>
我只是想提醒一下,
遠端IP(REMOTE_ADDR)並沒有包含在HTTP Header裏面,
HTTP Header可能有Client-IP或X-Forwarded-For,
這是代理伺服器用來提供代理伺服器所獲得的用戶端遠端IP,
相對是比較容易被竄改或偽造的,而且這兩個標頭內容可能是多個IP,
會視途中經過的代理伺服器處理時而延伸增加描述相關節點的各個遠端IP內容,
REMOTE_ADDR這個資訊是TCP連線的TCP Header內容,
只是在ASP/PHP裡面處理的方式跟撈HTTP Header的方式一樣而已...
(雖然同款但是不同師父)