我有一个安全课程项目。它要求进入一个给定的网站并下载其信息20次(网站有20个子页面),然后解析等。我正在使用c#的downloadstring来下载和解析页面。然而,在第五次之后,网站发现我正在以机器人(以编程方式)进行这些下载。
我创建的程序在第六次请求之前成功完成。 我下载内容并解析所需信息。当我到达第六个子页面时,我的电脑被阻止了。 它与时间间隔无关。因为,我在6-12秒之间使用随机生成的超时。但是,这没有帮助。它肯定与网页的输入计数器有关。就像"在30分钟内5次请求后不给予许可。如果超过限制,则将其阻止一天(或更多)#34;从那以后,我被封锁了很多次。我正在使用手机的热点。
我在互联网上搜索时找到了解决方案。人们通过netsh等使用IP更改方法。但是,我认为我的IP是静态的(WiFi),我无法弄清楚如何在C#Windows Forms App中以编程方式更改它。 因此,我想听听你的想法。
答案 0 :(得分:4)
您的ISP最有可能为您提供一个动态IP地址,即您计算机访问互联网(即WAN)的IP地址。如果是这样,他们控制IP而不是你。即使您的家庭网络中有多台计算机都在不同的本地IP地址(LAN)上,您仍然无法更改WAN IP地址,这是有效阻止的地址。
另外,我不打算判断,但我会说,如果这是一个实际的课程项目,那么从道德上讲,你的教练很可能不会要求你打造一个无辜的网站,而不是网站'主人希望你锤击它,因此阻止。我的建议是将您的网站设置在另一个没有阻止的网站上,以完成您的课程。也许你可以针对Google.com这样做?
答案 1 :(得分:2)
如果您确实需要通过其他IP地址发出请求,则可以将应用程序链接到多个不同的代理,并定期在它们之间切换。
另外,您提到您的IP是静态的,但本地IP与外部IP地址之间存在差异。为您的WiFi连接提供的IP地址是本地的,但外部IP地址是互联网站点可以看到的地址不同。
如果您有动态外部IP地址,则一个选项可能能够以编程方式连接到您的路由器并重新启动它。如果您实际有权访问IP地址,这是触发IP地址更新的一种方法。
总的来说,你正在做的事情很难实现听起来简单的任务。
答案 2 :(得分:2)
这是一个相当复杂且偏心的解决方案,然而,它可以很好地解决问题。创建4个Amazon EC2 t2.micro实例(Windows),并从EC2实例发出5个请求。您可以将结果存储到S3存储桶。这需要你做很多工作才能实现这个目标,但是你的另一端也是你第一次体验云工作。每个实例都有不同的IP。
此外,如果您将相同的实例上下旋转几次,则在任何情况下都不可能使用相同的ip,因此您可以轻松地使用一个实例。
更严肃地说:尝试更改用户代理字符串并在请求之间添加更多的时间(分钟,小时)。此外,在每五个请求之间打开和关闭热点,这可能每次都会给你一个新的IP。