2010-02-21 79 views
2

什麼將是我寫來阻止Windows計算機上的所有Internet訪問的應用程序的最簡單方法所有Windows上網?阻止從一個Win32應用程序

更多細節:

Windows系統:XP或更高

應用:一個基本的Win32應用程序用C/C++。

封閉:它必須能夠阻止和隨意解除,最好的方式,用戶無法輕易逆轉。 (通過右鍵點擊系統托盤中的網絡連接圖標。)另外,理想情況下,我希望它使用的方法可以在用戶重新啓動Windows或重置機器時恢復訪問權限,儘管我會如果機器在處於阻塞狀態時被重置,也願意讓應用在Windows上自動啓動並在啓動時取消阻止訪問。

上網:首先,我想從打傳統的HTTP/HTTPS的網站阻止常規瀏覽器。其次,阻止IM客戶端和客戶端社交網絡應用程序會很好。這也將是很好的,但不是必需的,仍然允許本地網絡共享文件等。(請注意,只有第一個要求是絕對的。)

最後說明:這不是要成爲安全工具,也不是它與用戶的關係是否是敵對的(例如,使用家長控制工具),因此使用無法由確定用戶解決的方案並不重要。 (考慮,我打算重啓或復位以清除阻塞。這意味着,任何解決辦法,用戶可能會發現,將採取更多的努力比這是好的。)

謝謝!

p.s.我懷疑Windows防火牆API不適用於我,因爲這需要適用於尚未啓用防火牆或沒有管理員權限的用戶,但如果我在此問題上得到更正,我會很高興。

+0

請注意,您本質上正在利用操作系統的弱點。因此,您可能必須處理每個Windows版本的每個SP。正如你正確地指出的那樣,「修復網絡」功能是存在的,你根本無法期望勝過這一點。 – MSalters 2010-02-22 09:59:51

+0

噢,請安裝這個程序很明顯。即請創建一個模態消息框,指出「ACME網絡攔截器已阻止與'updates.microsoft.com'的連接」。這個程序無論如何都會造成很多混亂,最好不要隱藏它。無論如何,我都會知道我會將我的軟件標記爲與此類應用程序不兼容。 – MSalters 2010-02-22 10:04:08

回答

2

這聽起來像你打算運行的應用程序,你不想想要訪問互聯網。也許你可以在禁用網絡的VirtualBox等虛擬機中運行它們。

2

你可以用一個Winsock SPI做到這一點。 Windows SDK有一個示例(在Samples \ netds \ winsock \ lsp下),它實現了所謂的分層服務提供程序,它允許您掛接Winsock提供的所有用戶模式功能,並拒絕/修改呼叫以阻止網絡訪問或重定向流量到不同的地點。所有已安裝的winsock應用程序都將受到影響,因此在您的代碼中,您可能會針對哪些應用程序可以進行等操作並禁用/啓用。現在一個有決心的人可以找到解決辦法,但這將是一個痛苦。

這就是說,這不是微不足道的要做,但樣品應該讓你大部分的方式。

1

不能有效地或實際上只有一個用戶模式應用程序編寫工具。

你需要寫什麼是網絡I/O堆棧過濾器驅動程序。這通過編寫Windows驅動程序完成。這與Windows Win32應用程序不同。驅動程序以內核模式運行,應用程序以用戶模式運行。

在Windows Vista和更高版本上,內核模式網絡編程接口(NPI)就是爲此而設計的。這是Windows防火牆使用的相同API。這些有時稱爲Winsock內核(WSK)API。

實際上,你正在編寫一個網絡防火牆(或多或少)

這裏有一些鏈接

注意,你可能需要至少兩種成分

  1. 您的駕駛
  2. 圖形應用程序,一個人可以用它來控制你的工具

如果您想要進行任何監控,您可能需要一個用戶模式服務來收集驅動程序中的數據。這比在驅動程序中試圖做得更好。一般來說,你應該在司機中做最少量的工作。

的幾個注意事項:

  1. 你需要寫這種軟件時,很自覺的安全性。這非常不重要。面向網絡的軟件具有最高的安全性要求。
  2. 認識到表現。
  3. 您的驅動程序和/或服務必須知道調用應用程序的上下文。這也是一個安全邊界。例如,沒有以管理員身份運行的應用程序不應該能夠控制您的驅動程序。