業務接入DDoS高防後,到達來源站點的所有業務流量都由DDoS高防轉寄,來源站點伺服器通常可以通過解析回源請求中的X-Forwarded-For記錄或者安裝TOA模組,擷取用戶端的真實IP。本文介紹如何擷取真實的請求來源IP。
配置連接埠接入的業務(非網站業務)
部分情境下您可以通過安裝TOA模組,擷取真實來源IP。具體操作,請參見通過安裝TOA模組擷取真實請求來源IP。無法安裝TOA模組的情境,請您聯絡技術支援人員。
高防IPv4執行個體
TCP OPTION欄位使用方法:業務四層連接埠接入後,高防節點和來源站點經過三向交握,在最後一個ACK資料包的TCP Option中插入了option type 254、源連接埠號碼和源IP等資訊,共佔8個位元組。具體位置如下圖所示。
連接埠號碼:
Magic Number欄位表示連接埠號碼,十六進位字元。樣本中為c4 06,轉為十進位可以獲得對應的連接埠號碼50182。源IP地址:連接埠號碼後的連續四個位元組表示源IP地址,十六進位字元。樣本中為65 ** ** 85,轉為十進位可以獲得對應的源IP地址為101.***.***.133。
高防IPv6執行個體
v6tov4模式
TCP OPTION欄位使用方法:業務四層連接埠接入後,高防節點和來源站點經過三向交握,在最後一個ACK資料包的TCP Option中插入了option type 249、源連接埠號碼、源IP、高防IP等資訊,共佔40個位元組。具體位置如下圖所示。

連接埠號碼:
Payload前兩個位元組表示連接埠號碼,十六進位字元。樣本中為9d7d,轉為十進位可以獲得對應的連接埠號碼40317。源IP地址:連接埠號碼後的連續十六個位元組表示源IP地址,十六進位字元,直接對應IPv6地址資訊。樣本中為2401*****0f87,即源IP地址為2401:b180:100*:*:*:f87:5d96:f87。
說明Payload中除連接埠號碼和源IP地址外,剩餘二十位元組為高防IP資訊。
v6tov6情境
TCP OPTION欄位使用方法:業務四層連接埠接入後,高防節點和來源站點經過三向交握,在最後一個ACK資料包的TCP Option中插入了option type 253、源連接埠號碼和源IP等資訊,共佔20個位元組。具體位置如下圖所示。

連接埠號碼:
Experiment Identifier欄位表示連接埠號碼,十六進位字元。樣本中為eb98,轉為十進位可以獲得對應的連接埠號碼60312。源IP地址:
Data欄位表示源IP地址,十六進位字元,直接對應IPv6地址資訊。樣本中為2401*****0f87,即源IP地址為2401:b180:100*:*:*:f87:5d96:f87。
為避免DDoS高防的回源流量被誤攔截,請您在來源站點允許存取DDoS高防的回源IP段。如何查詢回源IP段,請參見允許存取DDoS高防回源IP。
佈建網域名接入的業務(網站業務)
當七層Proxy 伺服器(例如DDoS高防)將使用者的訪問請求轉寄到後端伺服器時,來源站點看到的請求來源預設是七層Proxy 伺服器(例如DDoS高防)的回源IP,而真實的請求來源IP被記錄在HTTP頭部的X-Forwarded-For欄位中,格式為X-Forwarded-For: 使用者真實IP, 高防代理IP。
如果訪問請求到後端伺服器間經過了一台以上Proxy 伺服器(例如經過WAF、CDN等Proxy 伺服器),則HTTP頭部的X-Forwarded-For欄位記錄了真實的請求來源IP和所有經過的Proxy 伺服器IP,格式為X-Forwarded-For: 使用者真實IP, Proxy 伺服器1-IP, Proxy 伺服器2-IP, Proxy 伺服器3-IP, …。
因此,常見的Web應用伺服器都可以通過X-Forwarded-For欄位的內容擷取真實的請求來源IP。
針對不同的程式設計語言,常用的擷取X-Forwarded-For內容的方式如下:
ASP
Request.ServerVariables(“HTTP_X_FORWARDED_FOR”)ASP.NET(C#)
Request.ServerVariables[“HTTP_X_FORWARDED_FOR”]PHP
`$_SERVER[“HTTP_X_FORWARDED_FOR”]JSP
request.getHeader(“HTTP_X_FORWARDED_FOR”)
擷取到X-Forwarded-For欄位的內容後,以英文逗號(,)作為分隔字元,截取其中的第一個IP地址,即可擷取真實的請求來源IP。
您也可以通過配置Web伺服器(例如Nginx、IIS 6、IIS 7、Apache、Tomcat)擷取真實來源IP,具體操作,請參見擷取用戶端真實IP。