通过ICS的DNS请求(Internet连接共享)

时间:2015-04-24 02:00:46

标签: python dns twisted

最近我在python中实现了一个小型的强制网络门户。我将用户从dns请求重定向到登录页面。一切正常,直到我意识到当dns服务器我手动将客户端系统更改为公共DNS时,它完全绕过了强制网络门户。我的问题是,即使更改了dns服务器,如何重定向用户,或者如何阻止所有未使用默认dns的传出DNS请求。

我正在考虑在端口53上侦听将使用twisted捕获所有请求。 这是我如何做的一个非常简单的例子:

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,提供互联网连接,但它也不起作用。

1 个答案:

答案 0 :(得分:0)

如果用户通过更改DNS绕过您的强制网络门户,问题是他们可以在门户网站上路由DNS请求,因此 中无法做任何事情门户。您需要创建路由规则,将网络上的所有端口53流量重定向到DNS服务器,无论他们在何处尝试发送它。

坏消息是,你不能用Twisted做到这一点。您需要在路由器的操作系统中使用类似iptables的方式执行此操作。