背景
应同学的要求,帮忙刷票。我上去看了一下,对方网站做了IP限制,一天之内一个IP只能投一票,并没有使用cookie校验,验证码校验等技术,总体来说这个网站的情况是比较常见的,常见的解决办法有两个:
使用大量的真实IP刷票
如果你使用的是一个拨号上网的网络,每次的拨号都能随机分配IP,这种情况下,可以使用投票一次,拨号一次的方法来实现刷票,但这个方案有两个问题:
1. 编程稍微复杂,而且运行效率低。由于涉及到拨号上网的编程,以及断开网络链接到重新拨号上网是需要相对很长的时间的,因此编程复杂而且效率不高。
2. 由于每个ISP的IP分配池都是有限的,当你所在的IP池容量较小时,你能够分配的IP也是很少的,因此可能无法大量刷票,这个也是潜在的风险。
伪造IP刷票
如何做到伪造IP是个难题。TCP/IP层级别的伪造,我是不会的(至少目前如此)。因此只能想着在应用层伪造了。上网查了一下资料,发现通过使用HTTP的X-Forwarded-For头可以成功欺骗多数应用程序。
认识X-Forwarded-For
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在Forwarded-For HTTP头字段标准化草案中正式提出。
这一HTTP头一般格式如下:
X-Forwarded-For: client1, proxy1, proxy2
其中的值通过一个 逗号+空格 把多个IP地址区分开,