<div>
<div>
<p><span style="font-size: 16px;"> 很多程序需要检测客户端的IP地址,然后来授予相关的权限。比如数据库读写,文件读写,等等。其实还有一个很常见的应用,网站投票。网站投票始于2000年的左右,那时候.COM正热得发红,红得发紫。</span>
<br><span style="font-size: 16px;"> 早
期的投票只要投了就行可能技术牛人们还没有想到一个人会多投,那个时候反正上网的人也不多,后来慢慢的COKIE验证,IP验证等等都出来了,但是这些还
不是最保险的,因为COOKIE是放在客户端的,可以伪造;IP可以用代理,也可以伪造请求。真的没有什么东西是百分百保险的,这不,湖南卫视前几年就作
出更绝的,短信+QQ一票收费1元,刷的越多他们越高兴,刷吧呵呵。</span>
<br><span style="font-size: 16px;">废话不多说,进入正题</span>
<br><span style="font-size: 16px;"> </span>
<span style="font-size: 16px;">投票如果验证</span>
<span style="font-size: 16px;">COOKIE的话,把cookies删掉继续投,如果验证IP的话,换个代理继续投。如果你说换代理很麻烦?那就伪造http请求中的IP信息好了。</span>
<br><span style="font-size: 16px;"> 有
人会说:IP验证是在TCP层完成的,不是HTTP层完成的,如果伪造IP的话可能连TCP的三次握手都完不成。我这里说的不是完全意义的伪造。如果你使
用透明代理上网,那么在透明代理发送给服务器端的HTTP请求中会包含x-forward-for信息。例如:</span>
<span style="background-color: #c0c0c0; font-size: 16px;">X-Forwarded-For: 162.150.10.16</span>
<br><span style="font-size: 16px;"> 那么我们只要在发给服务器端的http请求中加入</span>
<span style="background-color: #c0c0c0; font-size: 16px;">X-Forwarded-For: 162.150.10.16</span>
<span style="font-size: 16px;">信息即可。</span>
<br><span style="font-size: 16px;">例如下边一个请求:</span>
</p>
<p><span style="color: #8c8c8c; font-size: 14px;">GET</span>
<a href="http://www.ahjinzhai.gov.cn/sdyxnx/vote.php?id=1"><span style="color: #8c8c8c; font-size: 14px;">http://www.ahjinzhai.gov.cn/sdyxnx/vote.php?id=1</span>
</a>
<span style="color: #8c8c8c; font-size: 14px;">HTTP/1.1</span>
<br><span style="color: #8c8c8c; font-size: 14px;">Accept:
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/x-shockwave-flash, application/vnd.ms-excel,
application/vnd.ms-powerpoint, application/msword, */*</span>
<br><span style="color: #8c8c8c; font-size: 14px;">Referer:</span>
<a href="http://www.ahjinzhai.gov.cn/sdyxnx/"><span style="color: #8c8c8c; font-size: 14px;">http://www.ahjinzhai.gov.cn/sdyxnx/</span>
</a>
<br><span style="color: #8c8c8c; font-size: 14px;">Accept-Language: zh-cn</span>
<br><span style="color: #8c8c8c; font-size: 14px;">Accept-Encoding: gzip, deflate</span>
<br><span style="color: #8c8c8c; font-size: 14px;">User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; TencentTraveler )</span>
<br><span style="color: #8c8c8c; font-size: 14px;">Host:</span>
<a href="http://www.ahjinzhai.gov.cn/"><span style="color: #8c8c8c; font-size: 14px;">www.ahjinzhai.gov.cn</span>
</a>
<br><span style="color: #8c8c8c; font-size: 14px;">Cookie: PHPSESSID=1847fc15020bc16b47ce250f457daab4</span>
<br><span style="color: #8c8c8c; font-size: 14px;">Cache-Control: no-cache</span>
<br><span style="color: #ff0000; font-size: 14px;">X-Forwarded-For: 162.150.10.16</span>
<br><span style="color: #8c8c8c; font-size: 14px;">Pragma: no-cache </span>
</p>
<span style="font-size: 16px;">上边的例子是安徽金寨门户网站中关于“十大优秀女性”评选的投票,1号选手是我班主任,当然要关注一下啦。</span>
<div style="margin-left: 40px;">
<span style="font-size: 16px;">猜测服务器端检测IP的代码可能如下:</span>
</div>
<span style="font-size: 16px;"> </span>
<div>
<span style="color: #8c8c8c; font-size: 14px;">function get_ip(){</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> if(getenv('HTTP_CLIENT_IP')) {</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> $gb_ip = getenv('HTTP_CLIENT_IP');</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> } elseif(getenv('HTTP_X_FORWARDED_FOR')) {</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> $gb_ip = getenv('HTTP_X_FORWARDED_FOR');</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> } elseif(getenv('REMOTE_ADDR')) {</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> $gb_ip = getenv('REMOTE_ADDR');</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> } else {</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> $gb_ip = $_SERVER['REMOTE_ADDR'];</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> }</span>
<br><span style="color: #8c8c8c; font-size: 14px;"> return $gb_ip;</span>
</div>
<div>
<span style="font-size: 16px;"> </span>
</div>
<br><br><span style="font-size: 16px;">对策:</span>
<br><span style="font-size: 16px;"> 这种场合我们要折中一下,即只检测HTTP_CLIENT_IP,在ASP.NET中就该是只检测Request.UserHostAddress。</span>
<br><span style="font-size: 16px;">总结:</span>
<br><span style="font-size: 16px;"> 客户端IP地址检测有不同方法,不同的方法组合适合在不同的场合,只要程序员认真审视不同场合IP检测的方法,这里演示的方法会慢慢失效的。</span>
<br><br><span style="font-size: 16px;"> 文后附了一篇文章,因为原文已经找不到了,无奈从GOOGLE的缓存中抢救回来,放在最后,原作者together,原文网址:</span>
<a href="http://203.208.39.132/search?q=cache:1W8gSVq0QpsJ:together.javaeye.com/blog/28779+%E5%A6%82%E4%BD%95%E4%BC%AA%E9%80%A0IP+%E5%8F%91%E9%80%81HTTP+%E8%AF%B7%E6%B1%82&cd=6&hl=zh-CN&ct=clnk&gl=cn&client=aff-cs-maxthon&st_usg=ALhdy28gHepAnU7eJrgu0FQucQdz7UX_jQ" target="_blank"><span style="color: #6466b3; font-size: 16px;">点击这里</span>
</a>
<span style="font-size: 16px;">。</span>
<div>
<span style="font-size: 16px;">2006-10-20</span>
<br><span style="font-size: 16px;">N年前CCTV的一场网络投票大战</span>
<br><span style="font-size: 16px;"> 话说几年前,CCTV搞了一个年度XX人物评选,与以往不同的是,这次评选采用网络投票的方式!彼时恰逢国内.com正热得发红,在这一次网络投票过程中,发生了一场“战争”。作为经历者之一,现在也许可以把它讲出来了。</span>
<br><span style="font-size: 16px;"> 先说投票人数,众所周知,我们的伟大祖国虽然人口众多,也不过屈屈十几亿而已,在当年的上网人数,也不超过一二亿,参加这次投票的,乐观点估计,撑死了也就30%吧,那就算2亿的30%,6000万吧。</span>
<br><span style="font-size: 16px;"> 再说候选人,聚集了国内企业界精英,如张xx,陶xx,倪xx,李xx等数十人,按正常的投票规律来看,这么多候选人,票数一分散,前几名的票数也不会超过1000万吧?</span>
<br><span style="font-size: 16px;"> 但事实让所有的人大掉眼镜!</span>
<br><span style="font-size: 16px;"> 投票开始没有几天,张xx,倪xx,陶xx的票数以每天一二百万的速度飞涨,形成了领跑的第一军团,后面的人是拍马也赶不上啊,望尘莫及!照这个速度,等到投票结束的时候,他们几个还不得每人都上亿票?要知道全中国一共才多少人啊,这不比国家统计局的数字还假嘛。</span>
<br><span style="font-size: 16px;">
再说其中一位侯选人xxx,在国内也算是大有名头的人物,此时此刻在这一场投票中竟然跌落三甲,自然极不甘心,一手下大将急老板之所急,找到我们部门,
要求为大老板的投票提供支援。要我们先分析一下前三名的投票机制,再帮老板弄弄。我一位兄弟,小B,听闻之后磨拳擦掌,誓要一展身手,此哥们平时就好搞搞
反编译、破解啥的,C++功力一流。</span>
<br><span style="font-size: 16px;">第一战:</span>
<br><span style="font-size: 16px;">投票方式,列出了所有候选人的姓名,可以多选。最初的这场投票,是没有任何条件限制的,你点鼠标就可以了,不需要注册,更无其他限制。</span>
<br><span style="font-size: 16px;">分
析过后,小B仅用了半天时间,写了一个投票程序,自动发送http请求给CCTV网站,为显得不要太突出,在每次投票中,不只选老板一人,在他之外,每次
在其它候选人中随机选一个人,这样就真真假假不好分辨了。公司里几百台电脑,马上全部装上该程序,24小时开机,开始猛力投票,老板的票数可就噌噌噌地上
去了......,首战告捷</span>
<br><span style="font-size: 16px;">第二战:</span>
<br><span style="font-size: 16px;">可
能CCTV也已经意识到了票数有点异常,毕竟里面也养了不少御用技术人员嘛,马上采取了补救措施,非注册用户不能投票!票数暂时增长放缓,但是马上大家都
更新了程序,既然你让我注册,我就按你的HTML里的代码随机生成用户名和密码,来自动注册呗!票数又噌噌噌地上去了......</span>
<br><span style="font-size: 16px;">第三战:</span>
<br><span style="font-size: 16px;">CCTV
有点傻了,赶紧想辙。马上做了一个要命的限制,从同一个IP段出来的所有用户,只能投一票!也就说是说,甭管你随机注册多少个用户,只能投一票。这一下可
是立杆见影,其它三家一直领跑的票数马上就停了下来。我方这边,小B不愧是高手,马上修改程序,伪造IP数据包,每次发送过去的http信息中都是随机生
成的IP。同时为加快投票速度,从单线程改为多线程。不过CCTV的服务器有点撑不住了,那几天访问他们网站的时候,那叫一个慢啊,跟蜗牛似
的......</span>
</div>
<p><span style="font-size: 16px;">终于,我们老板挤进了前三名,举公司欢呼啊。不过老板为人还是比较低调,不想当第一名,发话,保住第三名就可以了。因此我们就放慢了投票的速度。到最终整个投票结束的时候,老板恰好是第三名,一场大战终告结束。</span>
</p>
<p><span style="font-size: 16px;">这件事情给我们的教训就是:</span>
<br><span style="font-size: 16px;">第一,不能让人随便投票,得让用户先注册再投。</span>
<br><span style="font-size: 16px;">第二,一个用户只能投一票。</span>
<br><span style="font-size: 16px;">第三,在用户注册的时候,得加验证码。以防止作(和谐)弊。</span>
<br><span style="font-size: 16px;">第四,加验证码,还不能用静态的数字或字母,因为这样还是能作(和谐)弊。得用随机生成的图片组合。</span>
<br><span style="font-size: 16px;">第五,怎么防止用户随机生成伪IP包重复投票呢? <br></span>
</p>
</div>
</div>
分享到:
相关推荐
在某些特殊场景下,比如测试、安全研究或模拟用户行为,可能会有需求伪造IP地址来发送HTTP请求。然而,值得注意的是,这种行为可能涉及违反网络安全法规,因此在实际操作中需谨慎。 伪造IP发送HTTP请求通常涉及到...
结合HTTP扩展请求头 X-Forwarded-For 可以对客户端IP进行伪造 X-Forwarded-For 是一个 HTTP 扩展头部,用来表示HTTP请求端真实 IP,HTTP/1.1 协议并没有对它的定义,但现如今X-Forwarded-For已被各大 HTTP 代理、...
在 Java 中伪造 HTTP 请求 IP 地址是指通过修改 HTTP 请求头中的 IP 地址信息,从而使得服务器端能够获取到伪造的 IP 地址。这种方法可以应用于各种需要伪造 IP 地址的场景,例如在第三方系统接口对接时,需要将调用...
在网络通信过程中,服务器会记录客户端的真实IP地址,这些信息通常存储在HTTP头的`REMOTE_ADDR`字段中。为了绕过某些基于IP地址的限制或进行匿名访问,可以通过在HTTP请求头中添加特定字段来模拟来自其他IP地址的...
"PHP 伪造IP 发送HTTP请求"这个主题涉及到网络编程的核心概念,包括客户端与服务器之间的交互以及如何在这些交互中隐藏或改变源IP地址。下面将详细探讨相关知识点。 首先,我们来了解HTTP(超文本传输协议)。它是...
注,需要安全scapy 在centos下,请执行以下脚本安装scapy #!/usr/bin sh cd /tmp wget scapy.net unzip scapy-latest.zip cd scapy-2.* python setup.py install 需要手工启动和杀线程关闭 经测python2可用
2. HTTP请求模块:这部分代码会使用伪造的IP地址发起HTTP或HTTPS请求,与目标网站进行交互。 3. 用户代理模拟:为了使伪装更逼真,源码可能还包括了模拟不同浏览器或设备的用户代理字符串。 4. 循环访问机制:如果...
在网络环境中,IP地址和HTTP_REFERER(HTTP-REFERER)是两种常见的用于跟踪和识别用户请求的数据。其中,IP地址通常用来标识网络中的设备;而HTTP_REFERER则记录了用户是从哪个页面链接过来的。这两种数据常常被网站...
在IT行业中,网络编程是一个重要的领域,而"DELPHI7伪造IP头"涉及的是网络通信中的IP数据包处理和网络安全。Delphi是Embarcadero Technologies开发的一种面向对象的编程语言,它以其高效的编译器和强大的VCL(Visual...
本主题将深入探讨VB在这些领域的实践技巧,包括读写系统文件、操作注册表以及伪造IP地址等先进技术。 1. **读写系统文件** 在VB中,我们可以使用内置的`FileOpen`, `Write#`, `ReadLine`, `Close`等函数来实现对...
在描述中提到的“此程序可用于发送自己定义的arp请求,应答,简单的伪造ip”,这表明存在一个程序或者脚本,比如压缩包内的`sendarp.exe`,能够执行以下操作: 1. ARP请求:程序可以发送ARP请求来询问网络上某个特定...
利用php curl更改http头实现伪造IP
HTTP头在HTTP请求和响应中扮演着至关重要的角色,它包含了客户端与服务器之间交互的关键信息。本实例将探讨如何使用Visual Basic(VB)编程语言来伪造HTTP头,这对于进行网络测试、安全研究或者理解网络通信机制都有...
本文将深入探讨如何使用PHP cURL来伪造IP地址和HTTP头信息,并解释其工作原理。 通常,服务器可以通过`$_SERVER`全局数组来获取客户端的IP地址和其他相关信息。有两个重要的变量用来获取IP地址:`$_SERVER['REMOTE_...
PHP中使用curl可以通过设置特定的HTTP头部信息,实现伪造IP地址的目的。这种方法主要是利用HTTP头部中的某些字段来欺骗服务器,从而让服务器认为请求是从伪造的IP地址发出的。 curl支持的协议包括但不限于FTP, FTPS...
伪造攻击源,对目标dns服务器进行dns请求 通过IP查找目标服务器
总结,Python爬虫请求伪造技术是爬虫开发中的重要环节,它涉及到了HTTP请求头的伪装、会话管理、代理使用、反爬策略应对等多个方面。理解并熟练掌握这些技术,能帮助我们更有效地抓取和处理网络数据。在实际操作中,...
伪装IP发送请求源文件,可以通过此文本了解数据包是如何伪装发送的
但是当请求经过反向代理时,代理服务器会将原始的客户端IP地址信息附加在HTTP请求头中,通常使用`X-Forwarded-For`字段来传递这些信息。因此,为了获得客户端的真实IP地址,我们需要从HTTP请求头中读取这个字段的...