2015-04-24 36 views
2

最近我實現了我在python中的小型強制門戶。我將用戶重定向到dns請求的登錄頁面。所有工作正常,直到我意識到當DNS客戶端系統上的dns服務器手動更改爲公共DNS時,它完全繞過了強制門戶。我的問題是,如何更改dns服務器更改用戶,或者如何阻止所有未使用默認dns的傳出DNS請求。通過ICS(Internet連接共享)的DNS請求

我想在端口53上偵聽會捕獲所有使用扭曲的請求。 這是我我如何做一個很簡單的例子:

from twisted.internet.protocol import DatagramProtocol 
from twisted.internet import reactor` 

class UDP(DatagramProtocol): 
    def datagramReceived(self, datagram, addr): 
     print datagram, addr 

port = 53 
max_byte = 512 

reactor.listenUDP(port, UDP(), '', max_byte) 
reactor.run() 

難道我做錯了?

我也試圖阻止遠程端口53從提供Internet連接的主機上的防火牆,但它也不起作用。

+0

DNS是強制門戶中的一個大問題。一般來說,即使用戶未登錄,也需要使其工作。如果用戶想要連接到「stackoverflow.com」,則必須在第一次嘗試時獲得正確的IP地址。如果他不瀏覽器不會顯示強制門戶或在稍後重定向到頁面時出現問題。工作DNS的這一要求允許幾種技術擺脫強制門戶。但是列出它們以及如何抵消將遠遠超出戰略目標的範圍。 –

+0

@Klaus我已經處理過這部分,並且工作正常。但我只是不知道如何去在Windows中的DNS。在Linux中,一切都很簡單,iproute表 –

回答

0

如果用戶通過更改DNS繞過您的強制網絡門戶,問題是,他們可以路由DNS請求周圍門戶,因此沒有什麼可以在門戶做。您需要創建路由規則,將網絡上的所有端口53通信重定向到您的DNS服務器,而不管他們試圖發送它的位置。

壞消息是,你不能用Twisted做到這一點。你需要在你的路由器的操作系統中使用iptables等。

+0

謝謝@Glyph,我猜想同樣的事情。但如何重現在Windows中的iptable像規則? –