VB通过WINSOCK发送HTTP协议

来源:互联网 发布:js json对象添加数据 编辑:程序博客网 时间:2024/05/01 06:32

 

原创文章,转载请注明来源于本博客或给出超连接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。而且这个流量是真实流量。

等我完全优化好之后,再发程序。暂时没打算作商业用途。

此方法目前还不便于公开 :)

原创粉丝点击