wifidog源碼分析 - wifidog原理


wifidog是一個用於配合認證服務器實現無線網頁認證功能的程序,常見的情景就是使用於公共場合的無線wifi接入點,首先移動設備會連接公共wifi接入點,之后會彈出網頁要求輸入用戶名密碼,認證過后才能夠連入外網。其主頁是http://dev.wifidog.org/

  1. 實現原理

  其實wifidog原理很簡單,主要是通過管控iptables,配合認證服務器進行客戶端的放行操作。wifidog在啟動后都會自動啟動三個線程,分別為客戶端檢測線程、wdctrl交互線程、認證服務器心跳檢測線程。每當新用戶連接無線AP並瀏覽網頁時,wifidog會獲取新用戶的此次操作,並返回一個重定向到認證服務器的http於用戶,此后用戶通過認證服務器認證后,再繼續瀏覽網頁時,wifidog會詢問認證服務器此用戶權限,若放行則修改iptables放行此用戶IP。

 

  主要流程如下

  • 添加關鍵路徑對應的回調函數
  • 刪除所有iptables路由表
  • 建立新的iptables路由表
  • 開啟客戶端檢測線程(用於判斷客戶端是否在線,是否登出)
  • 開啟wdctrl交互線程
  • 開啟認證服務器心跳檢測線程
  • 循環等待客戶端連接(使用socket綁定2060端口並監聽,實際上在建立新的iptables路由表規則時會將網關的80端口重定向到2060端口)

 

  回調函數

  回調函數主要用於根據用戶http報文執行不同的操作,其原理就是分析http報文請求中有沒有關鍵路徑,若有,則執行關鍵路徑對應的回調函數,若沒有,則返回一個重定向到認證服務器的包給用戶。一次典型的流程為

  • 用戶連接無線AP,訪問某網站(比如http://www.baidu.com)
  • wifidog獲取到此http報文,檢查是否包含關鍵路徑,沒有則返回重定向包給用戶,將其重定向到認證服務器
  • 用戶認證成功,認證服務器將用戶重定向到無線AP網關,並包含關鍵路徑"/wifidog/auth"和token
  • wifidog接收到用戶重定向后訪問的報文,檢測到關鍵路徑"/wifidog/auth",然后訪問認證服務器進行token認證
  • 認證成功,wifidog修改iptables放行此用戶(根據mac和ip進行放行)

 

  wifidog的iptables規則

  這一部分我沒有仔細認真看源碼,但可以推論出wifidog是怎么修改iptables的規則的,了解iptables基本原理的同學都清楚iptables實際上有兩條路進行數據包處理,一條路會通過應用程序,一條路不同過應用程序,直接到POSTOUTPUT,而我認為wifidog建立的規則是

  • 只要是訪問認證服務器的http請求都直接不通過wifidog發送出去
  • 只要是通過認證的客戶端wifidog都會修改iptables讓其數據直接從FORWARD到POSTOUTPUT,而不經過wifidog
  • 其他行為都必須進過wifidog處理

 

  客戶端檢測線程

  此線程每隔60s會遍歷一次客戶端列表,對每一個客戶端列表統計流量,如果客戶端在60s間隔內沒有新產生的流量則不更新客戶端的最新更新時間,當當前時間減去最新更新時間大於斷線要求時間時,則會將此客戶端從客戶端列表刪除,並修改iptables規則禁止其訪問外部網絡,然后發送此客戶端登出包於認證服務器,認證服務器根據此登出包將此客戶端做登出處理。如若沒有超出斷線要求時間,此線程還會發送客戶端狀態獲取包於認證服務器,認證服務器返回此客戶端在認證服務器上的信息,如若信息表示此客戶端已在認證服務器上登出,wifidog則會執行此客戶端下線操作。

 

  wdctrl交互線程

  其原理是使用unix socket進行進程間通信,具體實現在之后文章中體現

 

  認證服務器心跳檢測線程

  原理也很簡單,就是每隔60s將路由的一些系統信息發送給認證服務器,認證服務器接收到會返回一個回執

 

  循環等待客戶端連接

  這里主要會接收到兩種類型的客戶端連接

  • 未認證的客戶端打開網頁操作,wifidog會接收到此http請求,並返回一個重定向到認證服務器的包於客戶端
  • 經過認證服務器認證成功后,認證服務器自動將客戶端重定向到無線AP的操作,wifidog接收到此類http請求后會檢測關鍵路徑"/tmp/wifidog",並把http請求中攜帶的token與認證服務器進行認證,認證成功后則修改iptables放行客戶端。

 

具體代碼實現見之后章節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM