原创文章,转载请注明来源于本博客或给出超连接hi.abidu.com/石首,谢谢
WINSOCK发送HTTP协议已经不是什么新鲜事物。最近有些朋友QQ上问我怎么发POST数据,怎么伪造来源地址和伪造IP,我就简单说说吧。
先说说一个流程吧:
一:先用WINSOCK(以下简称WSK)连接目标主机:
Winsock1.RemoteHost = “www.baidu.com”
Winsock1.RemotePort = 80 'WEB服务器端口
二:等待目标主机响应,当连接成功后向目标发送HTTP头信息。HTTP协议有1.1和1.0(基本淘汰),下面给出一个标准的1.1头信息:
strCommand = "GET / HTTP/1.1" + vbCrLf
strCommand = strCommand + "Accept: */*" + vbCrLf
strCommand = strCommand + "User-Agent: RMA/1.0 (compatible; RealMedia)" + vbCrLf
strCommand = strCommand + "Icy-MetaData: 1" + vbCrLf
strCommand = strCommand + "Bandwidth: 1544000" + vbCrLf
strCommand = strCommand + "ClientID: WinNT_5.1_6.0.12.1506_RealPlayer_R31CND_zh-CN_UNK" + vbCrLf
strCommand = strCommand + "Language: zh-CN, zh, *" + vbCrLf
strCommand = strCommand + "RegionData: 0" + vbCrLf
strCommand = strCommand + "SupportsMaximumASMBandwidth: 1" + vbCrLf
strCommand = strCommand + "Connection: Keep-Alive" + vbCrLf
strCommand = strCommand + "Host: www.baidu.com:80" + vbCrLf
strCommand = strCommand + "Accept-Language: zh-CN, zh, *" + vbCrLf
strCommand = strCommand + "Accept-Encoding: gzip" + vbCrLf
strCommand = strCommand + vbCrLf
Debug.Print strCommand
Winsock1.SendData strCommand
三:等待目标主机返回数据。当连接成功,并且发送头信息后,返回的数据有2种情况:
第一种就是BAD REQUEST
这说明你的HTTP头有问题,检查你发送的HTTP头信息。返回这个结果肯定是头信息的问题。
另外有人说是HTTPS的问题。其实此种说法是不正确的。至于为什么,你自己去看看HTTPS协议就知道了。
第二种就是返回请求的页面数据了
一般目标主机发完数据后会主动中断连接。除非是特殊服务器或者其自己开发的服务器。当然你自己也可以主动中断。
这样整个流程就算完了。
虽然这个步骤很简单,但用途很大。
比如网页采集,投票,刷I流量等等,因为是直接对话,速度会非常快,比blowser控件快很多。
一:伪造来源:
在投票,刷流量的时候,有些服务器是检测来源地址的,不允许外部提交。其实服务器上是用了HTTP_Referer 来检测来源地址。这个变量是客户端的浏览器传送过去的,所以可以在HTTP头信息中指定Referer的值,这样服务器就得到一个虚假的信息了。
具体做法只要在HTTP头信息中加一行:Referer:hi.baidu.com
这样,服务器就认为你是从hi.baidu.com提交来的数据,或者是从hi.baidu.com点击进来的。
二:"伪造IP"
另外一种就是服务器的IP检测机制。如果服务器用的X_FORWARDED_FOR检测的IP,同样,你可以在头信息中加入这样一行:
FORWARDED_FOR:221.233.13.98
这样,服务器就认为你的IP的221.233.13.98
不过这个方法不怎么凑效,因为用FORWARDED_FOR检测IP有很多问题(具体什么问题去看看ASP或者PHP),更多人喜欢用CILENT_IP,CILENT_IP是无法在头信息中指定的。
三:根据服务器的情况刷流量
目前本人最大的用途还是拿来做采集。以前用这个方式刷流量,但服务器的IP检测机制无法通过,所以用的比较少。
其实稍微想一下,服务器无非就是说相同的IP某个时间内只算一次。就像现在百度空间的访问量。现在有3个方式来刷:
第一:间隔刷
这个方式比较苯。但可以后台自动运行,还算不错。但刷的访问量最少。
也就是做一个TIMER空间,每隔65秒向你的空间发送一次HTTP请求。因为百度是单个IP1分钟内算一次。
这样算下来的话,1个小时只有60访问量。
第二:ADSL拨号刷
这个方式我试过,反复测试和优化后,1个小时能刷600到700的访问量。但有个弊端:刷访问量的时候你不能上网。
也就是反复进行ADSL连接,发送请求,断开连接,再连接,再发,再断开........
整个过程由程序来控制,后台运行,不影响电脑的正常工作,但唯一的遗憾就是不能上网了,因为ADSL反复连接断开,你根本上不了网了。
我手头上有我以前开发的一套完整代码,现发上来给大家用用。
源码下载地址:
电信:
源码请加QQ向本人索取
网通/电信
源码请加QQ向本人索取
把要刷的地址放到 URL.INI 里面,程序每次都随机从里面提取一个刷。
因为这个程序是我自己用的,没有写使用说明,有问题的话可以问我。
第三种方式:
这个是个很有争议的方式了。尽管如此,但效果还是很不错的。
以上都是通过现成TCP/IP协议连接,这个方式是需要对整个TCP/IP协议重新定义,达到完全“伪造IP"。
全后台运行,无须反复拨号。不影响电脑的使用也不影响上网。目前此方式一台电脑一个小时能达到1200个IP左右,因为前天才做完,目前还在优化,优化的好的话,一台电脑一个小时完全可以达到3600-4000个IP。而且这个流量是真实流量。
等我完全优化好之后,再发程序。暂时没打算作商业用途。
此方法目前还不便于公开 :)