需求來源:
1.平板或手機是個封閉系統無法給wifi設置代理
2.需要利用filllder進行抓包,內容篡改等實驗
擁有硬件資源:PC機器 + 小米隨身wifi
方案1: NtBind Dns + Nginx
基本原理:域名劫持 + 反向代理 + 正向代理
部署圖:
說明:
1.因為小米wifi與本地網卡是底層共享,設置PC機本地host和在MiWifi上設置DNS都沒有任何效果,所以只能在本地網卡上做文章
2.本地網卡上設置IPv4的首選DNS是127.0.0.1 指向本地DNS服務器
3.NtBind DNS是在Win7操作系統上搭建的本地DNS服務,具體配置參考鏈接:
在Windows7 系統上部署DNS服務器 http://blog.csdn.net/hyman_c/article/details/53560891
按照博文中的鏈接,在安裝NiBind時並不需要另外安裝dll文件,整個過程都很順暢
按照博文中為鏈接,當某些郁悶本地DNS中沒有配置時,就從配置的DNS服務器中同步拉取,這部分拓撲圖略
4.NtBind DNS中可以將所有需要劫持的域名都指向本地:127.0.0.1
5.Nginx上對劫持域名進行反向代理,代理到本地fillder端口(如果某些接口需要訪問本地開發環境的服務,可以直接指向本地開發服務提供的接口)
6.fillder上可以對反代過來的請求進行重新host,訪問外網真實服務器,這個host文件僅對fillder有效,會覆蓋NtBind DNS的域名解析
附錄Nginx配置,這是對sohu網站的配置:
server { listen 80; charset utf-8; server_name m.tv.sohu.com; location / { proxy_store off; proxy_redirect off; proxy_set_header Host $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; proxy_pass $scheme://127.0.0.1:8888; proxy_connect_timeout 90; proxy_read_timeout 90; proxy_send_timeout 90; proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; } }
注意事項:
1.因為是本地網卡DNS配置,不僅會影響Pad的訪問,同時也會影響本機瀏覽器的訪問,在實驗結束,為了不影響工作,需要將本地DNS改回原有的
2.此方案僅針對http代理訪問有效,https因為客戶端對證書的嚴格檢查等因素,次方案基本不會奏效
-------------------------------------------------------------------------方案1 改良版-------------------------------------------------------------------------------------------
采用方案1,一直糾結的點在於 怎么在不安裝多余app的情況下(因為平板是封閉系統), 篡改平板上域名解析后的地址,讓這個請求被fillder代理
經過測驗,可以為平板上的WIFI訪問設置靜態IP,手動配置DNS即可。這樣的話,如果當前環境擁有其他無線路由器(公共WIFI)也能訪問
到本機DNS,那么即使不用小米隨身wifi也能滿足我的需求(當前公司環境就是如此)
配置靜態IP
靜態地址:就使用未修改前DHCP分配的那個IP(這樣能有效避免IP沖突)
路由器地址:如果不知道,可以用自己手機安裝Ping & DNS 工具,然后連接公共WIFI,查看Network Info,Gateway 項就是路由器地址
前綴長度:默認24位
域名:這里就配置我們自己搭建的DNS地址
注意事項:
1.該方案因為沒有改變PC機本地網卡的DNS,因此不影響正常辦公,同時也不需要在fillder中再進行單獨host
2.因為公共wifi過來的IP不一定是192網段,所以建議在配置Bind DNS時在named.conf中為allow-query配置為any 即不做IP限制
改良后的部署圖:
方案2 : 在方案1的基礎上去掉nginx反向代理,將fillder的代理端口改為80端口即可
基本原理:域名劫持 + 正向代理
說明:
1.因為本機需要開啟nginx進行開發調測占用80端口,所以舍棄了該方案
方案3 : NtBind Dns + Htran
基本原理:域名劫持 + 正向代理 + 正向代理
部署圖:與方案1類似,只是將其中的Nginx用Htran取代
說明:
1.該方案可以滿足80端口被占用的情況下,也能用fillder進行抓包
2.域名劫持 + 端口轉發(正向代理)可以解決不僅限於http的數據,同時可以對socket進行代理,適宜於解決移動終端不能設置代理服務器的情況下的上網問題
3.此方案可以把80 443的接口都轉發到fillder代理上,可以對非嚴格校驗的https請求進行抓包解密,信息篡改
4.此方案對采用了httpDNS的移動應用會存在失效的情況
5.因為目前方案1滿足了我的原始需求可以支持我進行問題定位,因此此方案未進行驗證,不排除還有其他不可行的因素在其中