如何阻止访问URL

时间:2017-02-20 04:40:12

标签: c# url unity3d

所以我正在尝试编写一个可以限制我访问某个URL的Unity3d项目。例如,如果我想阻止Youtube.com,它将阻止我从所有浏览器访问youtube.com。

我在C#程序中看到你可以使用System.Windows.Form类来完成它。但Unity3D无权使用System.Windows.Form。是否有任何内置方法可以使用unity3d阻止URL?

任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

  

是否有任何内置方法可用于阻止URL使用   unity3d?

没有内置方法可以做到这一点。你必须自己创建一个。

要做到这一点,请通过位于

hosts 文件
C:\Windows\System32\drivers\etc

在此文件中添加要阻止的网站的示例

阻止stackoverflow:

127.0.0.1 www.stackoverflow.com

阻止Google:

127.0.0.1 www.google.com

将其置于代码中

1 。从C:\Windows\System32\drivers\etc逐行读取File.ReadAllLines的主机文件:

string[] hostData = File.ReadAllLines(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts"));

2 。将hostData数组转换为List,其中包含:

List<string> hostDataList = new List<string>(hostData );

3 。要添加网址,只需创建一个以字符串(网址)作为参数的函数。如果有网址,请从该网址中删除http

循环遍历hostDataList列表,并通过String.Contains检查,确保您要添加的网址不存在。如果存在,请将其添加到列表中:

string urlToBlock = "127.0.0.1" + " "+ url;
hostDataList.Add(urlToBlock);

4 。要删除网址,只需创建一个以字符串(网址)作为参数的函数。如果有网址,请从该网址中删除http

循环浏览hostDataList列表,确保您要添加的网址存在。如果它不存在,请返回。如果存在,请找到索引,然后将其从List

中删除
int index;
//Make sure that the Url exist before removing it
if (containsUrl(url, out index))
{
    hostDataList.RemoveAt(index);
}

注意

containsUrl函数只是循环遍历hostDataList列表的函数,然后检查是否找到了提供的字符串。如果找到则返回true并将找到该字符串的索引存储到out索引参数中。

这是原型:

bool containsUrl(string url, out int index){...}

5 。完成后,将hostDataList List转换回数组,然后使用File.WriteAllLines保存,保存它。

string savePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "drivers/etc/hosts");
string[] hostDataArray = hostDataList.ToArray();
File.WriteAllLines(savePath, hostDataArray);

我知道这是有效的,因为我以前做过。回答这个问题,您应该能够在Windows上完成这项工作。

通知

要使其正常工作,您的应用程序必须以管理员权限运行。有很多ways来做这件事。

如果从Unity编辑器进行测试,请右键单击Unity徽标,然后选择以管理员身份运行