限制上网 SPI 获取IE代理地址
某些程序需要实现控制计算机上网的功能,譬如允许孩子周末晚上8点到10点左右可以上网,其他时间不能上网。经过研究,用户态下实现这个功能大致有以下几种方法(以下讨论基于windows各平台):
1、使用windows Hook,监视IE或其他浏览器的地址栏,发现有www或http字样的,则更改这些url,使之不能访问相应的url。这种方法实现可能相对容易,但是不准确,不能限制所有的上网软件。糊弄未成年小孩可能比较有效。
2、基于SPI的数据包过滤。通过编写自己的Winsock服务提供者(SPI),过滤掉不符合规则的包,如过滤访问Internet的数据包。下面会详述此方法。
3、使用Winsock 2的WSAIoctl特性进行包过滤。WinSock 2允许程序使用WSAIoctl() 给一个SOCK_RAW类型的socket设置SIO_RCVALL属性,这样Socket可以接收到所有经过本机的数据。此方法详细参阅文档“无需驱动程序的Sniffer-IPMon”
以上三种都是在用户态(user-mode)的实现方法。优点是方便实现,无须编程者理解驱动方面的知识,缺点是还是可能遗漏一些数据包,譬如那些一些病毒软件可能不通过socket接口来访问网络,这样用户态的程序