相信大多数朋友都是会使用WPE的,因为这里也有不少好的教程,大家都辛苦了!
先说说接触WPE的情况。当时好像是2011年,我本来不知道WPE对游戏竟有如此大的辅助作用的。起先找WPE软件的时候,只是因为我找网络抓包工具,相信大家都听说过大名鼎鼎的Sniffer。偶然之间,我发现了WPE,当时对WPE了解甚少,也不会使用,但并没急着找教程,因为对于软件,一般很容易上手的我,会自己先试用一下。大多软件都很容易上手的,WPE倒是花了很大的工夫,根据对抓包和发包的理解,一开始摸索出了一点点门道来。
后来慢慢的熟悉WPE了,但是没有像各位大神那样经过系统学习,可能只算小偏方,或者只是旁门左道吧。
————————————————————————————————————————————————
<上面的话可以不看啊,哈哈哈>

     
声明:本文部分内容来源与网络!

NDIS5中间层驱动如何修改封包或自定义封包? 10C
由于对ndis不怎熟悉,所以来问问各位大神,我基于wdk例子passthru扩展,
在PtReceivePacket与PtReceive两个函数里截获收包,判断是否需要过滤,如果需要过滤,就自定义一个数据包上传,因为不太熟悉NDIS,所以自己研究了下,我是这样想的:先申请一块内存用作自定义数据包的缓冲,填好自定义数据后,申请一个新的packet,将packet与缓冲区关联起来,然后上传。但这样就出现了问题,我申请的内存不知道应该在哪里释放,这样就会造成内存泄漏。而且也会蓝屏,所以来问下各位大神,如何在ndis里修改数据包,或者自己构造一个封包

 

https://github.com/vilyever/AndroidSocketClient

下面开始简易教程!
以页游为例:

   网络的重要性不用我说,所以关于网络的编程对我我们来说也是非常重要,非常实用的!

 

AndroidSocketClient

https://blog.csdn.net/qq\_22400315/article/details/70208842
AndroidSocketClient简单使用

https://github.com/xuuhaoo/OkSocket

oksocket

登录游戏,打开WPE肯定是作为准备工作的,大家用的中文版也是一样的,实在不清楚对照按键的位置即可【下图】

   但是我在网络上却没有看到多少关于VB网络编程方面的知识,一方面是VB用的人比较少,不会用就说VB不好(个人认为学好VB以后C++、Java一看就会!);另一方面是大家不愿意公开这方面的知识,自己辛辛苦苦探索的,还得靠它吃饭,怎么可能轻易拿出来公布?但是社会要发展,人类要进步,为了让更多的人受益,为了让体现自己价值,我愿意分享自己对于网络编程的经验。我也是刚开始学,所以这篇文章难免有错误之处,而且认识也相对比较浅显,只是作为入门级的文章吧!

I P封包

图片 1

   用VB操作网页,主要有两种方法:一是模拟操作,即自动控制。二是POST,也就是发送消息(数据包)。这两种方式涉及到:Webbrowser控件、Inet控件、XMLHTTP对象。其中,Webbrowser控件主要用来模拟操作,让机器自动完成点击、选中、填写等操作;Inet控件和XMLHTTP对象主要是用来POST,即发送数据包,在不加载网页的情况下直接与服务器交互。下面开始讲解它们的应用。注:我在这里仅仅讨论操作网页,像聊天、文件传输在这不作为重点,毕竟这些相对来说还是比较少用的。

從一直以來討論至今﹐我們都不斷地接觸到“封包”這個詞﹐相信您也很有興趣想知道這個“封包”究竟是個什麼樣的東東吧﹗下面就讓我們一起看看一個IP封包究竟包含了那些內容。

 

    webbrowser,这是一个比较基础的控件,关于它的学习资料,网上还是很多的。用它操作网页是一种看得见,摸得着的过程,基本的任务都能完成。经过半年的使用经验,总结一下它不能完成的任务:1.不能操作JS脚本。如果你操作的网页内容被放在了JS脚本里,那么就不要用这个控件了。2.不能点击Flash按钮。Flash按钮比在网页中较特殊,用webbrowser控件无法找到这个对象。我所遇到的就是这两条,当然肯定还有别的。下面通过一个万能代码来看一下这个控件:

擷取IP封包

 

For lngIndex= 1 To
WebBrowser1.Document.All.Length – 1

如果您的機器上面裝有 netxray
等封包擷取軟體﹐或使用NT的“網路監視器”﹐我們就可以擷取那些進出本機的封包了。

下面开始行动:
点击View(查看)——Option(选项)【下图】

    If InStr(1,
WebBrowser1.Document.All(lngIndex).outerhtml, “替换为你要查找的关键字”)
> 0 Then ‘查找关键字

當我們打開擷取功能之後﹐然後使用ping命令隨便ping一個地址﹐如﹕www.hinet.net。我們可以擷取到如下這些封包﹕

 

        If
UCase(WebBrowser1.Document.All(lngIndex).tagName) = “INPUT” Then
‘如果点击是超链接 把INPUT换成A

 

图片 2

           ‘
WebBrowser1.Document.All(lngIndex).Click 
‘如果是模拟点击就用这个语句

图片 3

将除了Send(发送)以外的其余3个选项全部取消选择,并确定【下图】(小诀窍:此处我只想要截取发送的封包,其他对我来说只会碍眼,也影响之后的操作,所以只留Send)

          
WebBrowser1.Document.All(lngIndex).Checked = True 
‘如果是模拟选中复选框,就用这个语句

 

 

            Exit For

正如我們所見到的﹐我們擷取到DNS和ICMP的封包了﹐因為www.hinet.net需要到DNS解釋﹐而ping是一個ICMP協定。您或許知道ICMP封包的type為“Echo
Request”和“Echo Reply”分別代表什麼意思吧﹖

图片 4

        End If

讓我們再深入一點﹐看看DNS封包裡面有些什麼東東﹕

点击Target program(目标程序),选择所玩游戏的进程(此处玩傲剑用的是单进程版的Opera浏览器,故很容易就选择了,再Open(打开)【下图】,注意:现在世面上有很多浏览器是多进程的,这个就需要大家用耐心去一一测试了,或者巧合之下第一次就选中了

    End If

 

 

Next

图片 5

图片 6

用这个代码,可以灵活的模拟:点击按钮、点击超链接、操作复选框、操作下拉式菜单、填写数据。这个代码大概的意思:最外层循环遍历整个网页中的标签对象,然后用第二个循环去匹配这个对象中是否有我们期望的关键字,如果有的话,再判断这个标签对象的类型,一般情况下,超链接是A,其他的均为INPUT,注意一下一定要大写,因为从webbrowser中获取的网页源码全是大写的,与真实源码有差别。在最里边也就是操作语句了,如果是文本框输入就写成WebBrowser1.Document.All(lngIndex).Text

“期望的字符串”。如果是想点击按钮或者超链接就用WebBrowser1.Document.All(lngIndex).Click。如果是选中复选框WebBrowser1.Document.All(lngIndex).Checked
= True。如果是下拉式菜单WebBrowser1.Document.All(lngIndex).Value =
“对应的值”。基本的操作就是这些,轻松胜任。当然,用这个万能代码是在迫不得已的情况下才用的。如果网页很简单,按钮,输入框等有ID,那么直接写WebBrowser1.Document.All(“按钮的ID”).Click就可以点击按钮了,其他同理,输入ID即可。

     
在实际使用中,我们会遇到一个非常头疼的问题:webbrowser操作网页必须等待网页加载完成,否则会找不到标签对象。网上比较流行的做法是用webbrowser的Busy方法等待网页加载完成,但是根本没有效果。在此我分享一下自己的经验,想想我们人是怎么判断网页是否加载完成的?因为出现了一些新的信息,因为有变化!我们当然也可以让程序这么去判断。我们可以在新网页中找一个固定存在的字符,用while循环不断获取webbrowser的网页源码,直到出现这个固定字符,我们就认为加载完成。例如,在目的网页里会出现123这个字符,那么:

While
Instr(WebBrowser1.Document.All(1).outerhtml,”123”) =0

      Doevents

Wnd

这样写可以很好的达到等待网页加载完成的目的。这里WebBrowser1.Document.All(1).outerhtml是webbrowser中所有的标签对象,基本上可以说是获取网页源码。如果用这个语句无法获取就用WebBrowser1.Document.Body.InnerHtml,最好是用第一个,第二个不保险。顺便提一下,WebBrowser1.Document.All(1).outerhtml是获取网页源码,如果我们不想要源码,而想要网页内容,即浏览器展示给我的文字,可以用:WebBrowser1.Document.body.innertext。

     
还有一个问题就是有些网站点击链接时会在新的窗口中打开,这时候webbrowser会调用IE浏览器,导致网页跳出程序,那么可以用下面的代码处理NewWindow2事件:

Private Sub
WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean)

   Dim frmWB As Form1

   Set frmWB = New Form1

 

   frmWB.WebBrowser1.RegisterAsBrowser =
True

 

   Set ppDisp =
frmWB.WebBrowser1.Object

   frmWB.Visible = True

   Unload Me

End Sub

注意这里的Form1是窗体名称,要根据你的实际情况修改。

     
另外,注意一下Silent属性,把它设为Ture,防止弹出一些脚本错误的提示。

     
好了,说到这这个控件也就没什么了。常用的都说了,一些注意的问题也说了,其他的就要靠大家自己努力了!多练!(参考资料:webbrowser控件属性、方法大全。)

     
Inet控件。相信大家已经体会到了Webbrowser的不足之处:慢!因为它要等待网页加载完成,每一个图片,每一个脚本都要加载出来,不仅数据量大,而且造成速度太慢,简单的例子,如果要暴力破解密码,显然webbrowser是不可以的!。Inet控件的POST功能恰好弥补了这个缺点。POST是直接以数据包的形式,直接与服务器对话,比如你想登陆QQ空间,根本不用过去打开那个网页,直接POST给QQ服务器登录数据,符合条件就登录成功,就可以进行下一步操作了。这些操作由于都是在无形之中的,所以难度比webbrowser控件大。我不清楚读这篇文章的人是什么水平,由于这个涉及的知识太多太杂,继续往下看之前你必须先学会抓包工具HTTPWATCH的使用(点击下载教程以及软件)。如果你对这个软件有所了解,就可以进入下一步了!我再次说明,关于封包发包这部分知识很乱很杂,你只要跟着我走,不会的就停下来多花点功夫,暂时不懂也没事,等你把我这篇文章看完了我保你会!

 

    什么是数据包?

 

    
数据包,又称作封包。简单的说,你上网打开网页,这个简单的动作,就是你先发送数据包给网站,它接收到了之后,根据你发送的数据包的IP地址,返回给你网页的数据包,也就是说,网页的浏览,实际上就是数据包的交换。以上蓝色部分是百度百科上面对数据包的诠释,有朋友可能看不明白,那么我就顺着这个解释,来举一个经典的“老王借钱”例子:

 

     1、隔壁的老王向你借钱。

     2、接收到老王借钱的请求。

     3、检查自己的腰包是否有钱。

     4、是借还是不借?

    
5、把结果告诉老王。老王就会作出相关的反应(借的话他就爽,不借他当然就不爽了~)。

 

    
其实上面只是一个再也简单不过的借钱行为,不过如果我们把它套用在客户端与网页服务端的通讯流程的话,会发现其实两者有着异曲同工之妙:

 

    
1、老王相当于客户端,而借钱也就相当于一个请求。钱的数量,就相当于请求中的参数。老王向你借钱,我们可以把这一步称为POST,就是把借钱这个请求传递给你(服务端)。

    
2、你,就相当于服务端,而这个钱,说白了,就是客户端传递过来的参数。你接到老王发出的借钱请求,这一步叫做响应。

    
3、检查自己的腰包是否有钱,就相当于服务器验证用户的请求是否合法。比如一个网上支付系统,用户请求要支出1000块钱,然后用户就会把1000块钱这个参数传递到服务端,服务端当然就得验证一下用户的钱包里面是否有1000块钱,如果有的话就通过,没有的话当然就返回错误信息了。这是验证/校验数据。

    
4、当第四步过后,如果腰包有钱,而你又情愿借给老王,此时,就相当于服务端给客户端返回一个信息,是借(True)。反之,就是不借(False)。这一步叫做返回/反馈。

    
5、老王接到你给他回的信息,就会根据结果的不同而产生响应的动作。响应你动作的这一方法称为GET。

 

    
这样一来,相信你对服务端和客户端的基本通讯过程大家都清楚了。但是,造成这一过程的起源是啥?是钱!我不得不说钱是万恶的(这也让我说得通,YY下)

    
服务端和客户端之间首要的通讯条件当然就是必须可以联网。你说如果老王是死人的话,怎么向你借钱,对吧?不过要是真的有死人向你借钱的话……离我远点。其实这一个“借钱”的过程,钱充当着比较重要的角色,一个数据包里面包含了很多参数,参数也会有相应的值。而“钱”,在这里就充当着一个数据包参数的角色,钱的数量,就是这个数据包参数的值。

 

    
到这里,我们就开始本课题的深究吧,因个人水平有限,文中难免会有不妥之处,欢迎大牛拍砖。

 

    
经过前面的说明(纯属瞎扯),相信大家对数据包也有一个模糊的概念了,当然,这只是相对于从未接触过这一方面内容的新手而言。下一章我们来研究一下如何去抓包,并来编写一个QQ空间的留言工具来完成这一个课题的学习。

 

     数据包有什么用?

 

    
数据包的交互是最底层的网络协议通讯,利用数据包,我们完全可以模拟客户机和服务端通讯的过程。比如我们需要编写一个帐号注册器,如果用传统的模拟网页表填写的方式去实现的话,这样虽然比人手工操作的方法要快,但也还需要载入一个网页,速度还是逊色的。但如果用数据包去实现的话,就相当于只把一系列的字符串传递到目标服务器即可。载入一个网页,包含了图片、表单等元素,大一点的话起码得要下载几百KB的数据,但数据包,最多也就几KB,如果客户机和服务器的网络都正常的话,提交数据包到服务器几乎就是一瞬间的事情。

 

     如何抓包?

 

    
相信大家对抓包这个概念并不陌生。从字面上很好理解,抓包就是一个捕获数据包的过程。我们前面说了,客户机和网页服务器之间的通讯都会产生数据包,如果我们想模拟它这个通讯过程的话,就必须要把它们之间通讯所产生的数据包捕捉下来,再进行分析。

    
可能大家都听说过WEP,Sniffer等工具,其实它们都是抓包工具。但是数据包有不同类型,TCP包,通常是软件所产生的数据包,我们玩网络游戏的时候和服务器所产生的就是TCP包。而我们在网页通讯的时候,所产生的就是HTTP包了。TCP包是以二进制的方式进行传输的,HTTP却是以明文的方式进行传输的。

    
在这个教程中,我们统一使用HTTPWATCH这个软件来进行抓包。

     HTTPWATCH
是一个IE插件,也是一个强大的HTTP捕捉工具。

 

    
安装完HTTPWATCH之后,要打开IE浏览器,在浏览器工具栏处打开才行(第三方浏览器诸如
360 都不支持IE插件)。我们先来看看HTTPWATCH的强大界面:

HTTPWATCH 界面:

图片 7

①工具栏

        
Record:开始监听网页数据包。

         Stop:停止监听。

         Clear:清空结果列表。

 

     ②数据包监听列表

     ③数据包详细信息       

        
基本信息(Overview):显示数据包的目标地址,返回结果等信息。

         时间图表(Time
Chart):显示数据包在通讯状态中 连接、等待、接收 的占用时间。

        
头信息(Headers):HTTP的基本头信息。

         Cookie:百度百科

        
缓存(Cache):在本地临时文件夹暂存的数据。

         查询字符串(Query
String):表单产生的查询动作的主要查询参数。

         传递参数(POST
Data):POST数据包的主要参数,也就是传递到服务器的参数。

        
返回信息(Content):返回的页面源码。

        
数据流(Stream):提交到服务器的数据包参数以及HTTP头信息。

 

    
以上就是HTTPWATCH的大体结构。在打开IE浏览器,启用这个插件之后,点击“Record”就可以进行数据包的监听了。在监听状态下,你所做的每一步网页操作都会有相关的数据流动,HTTPWATCH大致上可以抓三种行为:

 

     1.POST行为

     2.GET行为

     3.CACHE

 

    
POST大家都很熟悉的了,就是向服务器传递参数。平时我们提交一个网页表单的时候,产生的也是POST方法。GET大家也不会陌生,当POST完毕之后,服务器一般都会返回一些信息给用户,这就是相对于用户而言的GET。简单通俗点的话,大家可以把POST理解为上载数据,把GET理解为下载数据。至于CACHE,这个就是缓存操作,直接从本地缓存里面取出来的资源。

    
在这里我们学习的就是POST数据,我们将会通过一个QQ空间的留言工具来带大家入门这个课题的内容。

    
首先我们打开

    
众所周知,如果没有在网站上登录自己的QQ,是没有办法留言的,因为QQ空间不支持匿名留言。我们进入网站的时候,它也会先提示登录,然后才可以后续操作。所以,我们如果要做这样一个留言工具的话,就必须要具备以下步骤:

 

     1.登录QQ

     2.发送数据包

     3.取得返回信息

 

    
QQ的登录数据包我在这里就不演示抓包了,因为腾讯已经改了新的登录接口,但是旧的还能用,我这里还是用旧的QQ登录数据包。在此之前,我们先来给好友的QQ空间留言,抓包,我在有钱哥的空间里面留言“测试测试”,大家可以看到,列表中就产生看一个新的项目。其Method属性就是POST!这就是传递到QQ空间服务器的数据包了,大家可以看看红色框框的内容,是不是觉得很熟悉?

 

con=%E6%B5%8B%E8%AF%95%E6%B5%8B%E8%AF%95%7E%7E&uin=298096110&suin=542464221

 

    
没错,这红色字体部分就是传说中的HTTP数据包!

    
大家可以看看,这个数据包里面只有三个参数,分别是con,uin,suin,这三个参数一眼看上去就很容易知道它的意思了,我们分析数据包的时候一般都是根据其参数名称的字面意思以及参数的值来判断这是一个什么样的参数。

    
我刚才在比你·有钱的QQ空间留言了,我的QQ就是542464221,而有钱的QQ是298096110。除此之外,还有一个最重要的参数,那就是con,这也是我们留言的内容!大家可能会奇怪,上面的留言内容不是“测试测试~~”吗?怎么现在看着变成了一堆乱码?

    
其实这不是乱码,而是网页编码。至于转换的方法,我们会在下面讲到。

    
相信大家都懂得抓包了,自己多实践几次,你也可以找一些网站上的注册页面,自己尝试着注册一个帐号,然后提交一个表单,抓包看看,尝试着去分析一个数据包,弄清楚各个参数的意思。

 

 

     如何发送数据包?

    
这一节是本教程的核心部分。既然我们已经捕捉到了QQ空间留言的数据包,那么我们完全可以模拟这个过程了。VB对于网络的操控性能还是很不错的。在VB中封装了inet,winsock等控件,可以很轻松的调用各种方法去发HTTP数据包。在本教程例子当中,我们用inet作为例子去讲解一下如何发送数据包。

 

     我们先来看看Inet的execute方法

     InetObject.Execute
“[POST页面URL]”, “POST”, “要发送的数据包内容”, “封包头信息”

 

    
我们在发送数据包的时候需要注意,一个完整的数据包,应该是由报头和封包内容组成的。比如上面我们抓出来的数据包之中:

 

     这是数据包内容:

    
con=%E6%B5%8B%E8%AF%95%E6%B5%8B%E8%AF%95%7E%7E&uin=298096110&suin=542464221

 

     这是数据包头信息:

     POST /cgi-bin/mobile_update_msg
HTTP/1.1

     Accept: image/jpeg,
application/x-ms-application, image/gif, application/xaml+xml,
image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash,
application/QVOD, application/QVOD, application/vnd.ms-excel,
application/vnd.ms-     powerpoint, application/msword, */*

     Referer:

     Accept-Language: zh-CN

     User-Agent: Mozilla/4.0 (compatible;
MSIE 8.0; Windows NT 6.1; Trident/4.0; QQDownload 646; SLCC2; .NET
CLR      2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center
PC 6.0; CIBA)

     Content-Type:
application/x-www-form-urlencoded

     Accept-Encoding: gzip,
deflate

     Host: qz.qq.com

     Content-Length: 75

     Connection: Keep-Alive

     Cache-Control: no-cache

     Cookie: pgv_pvid=5935155721;
pgv_flv=10.0;
ptcz=711d7cb1ddde86208f1cefa14aeef570559b7327db1e1500853742cd7ff607b7;
pvid=5935155721; icache=GDGGMM@LM; pgv_r_cookie=107649076403;
o_cookie=542464221; suid=5538977674; adid=542464221;
adSP=irZ4SlVL95zhdFpg5bULoRAhsvy9F4wI/hgQDREbzJc=_4400_326830_1278923685_;
adVer=2839; ac=1,030,006; showModel=list; tips-share=1;
aq_displaybubble=542464221; pt2gguin=o0542464221; uin=o0542464221;
skey=@cKMj7aqRM; speed=1; browsertype=4; inbox=0

 

 

    
一般来说,我们在inet之中并不需要把数据包的所有头信息都附加进去。不过有一句是肯定要的,那就是:

     Content-Type:
application/x-www-form-urlencoded

 

    
这指定了数据包网页所支持的类型。如果是在winsock里面的话,则需要附带所有的头信息。头信息指定了一个数据包的属性等信息。通过上面的头信息,相信大家也可以获悉很多内容。

    
我们再回到上面一小节所提到的问题,数据包里面的con参数为什么是经过转换了的字符?因为我们在访问一个网页,或者在HTTP数据传输的时候,服务器并不能直接识别中文字符,因此需要转换。不同编码方式的转换方式也有不同。

          
QQ空间留言工具的例程我已经写好了,里面的注释很详细,我在这里就不多说了。大家下载例子看看就一目了然。这个例子真的注释很详细,一看就会!(点击下载QQ留言工具)

 

     
好了,看到这相信你对抓包、封包已经有了一定了解,并且跃跃欲试了!上边的例子是来源于网络的,那个留言工具的代码也比较复杂,为了让读者更加清晰,我再举一个例子,简化一下代码。

     
我就拿网易开刀吧!登录网易博客!首先打开我的网易博客,然后点击登录,再点击HTTPWATCH的Record,输完帐号密码,点击登录,可爱的小包包都被我们抓到了,下面是stream(流)

POST /logins.jsp HTTP/1.1

Accept: text/html, application/xhtml+xml,
*/*

Referer:

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatible; MSIE
9.0; Windows NT 6.1; Trident/5.0)

Content-Type:
application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

Host: reg.163.com

Content-Length: 205

Connection: Keep-Alive

Cache-Control: no-cache

Cookie: MAIL163_SSN=yangyuankp;
vjuids=b46ab8d61.12dc620ae36.0.8235534c19532;
vjlast=1296109187.1307365009.22;
_ntes_nnid=174bb1179a0306265cd30352879cecbd,0;
_ntes_nuid=174bb1179a0306265cd30352879cecbd;
P_INFO=yangyuankp@163.com|1306890848|2|blog|11&15|heb&1306846208&blog#heb&131000#10|189147&1;
ALLYESID4=00110324074458898832678; NTES_LOGINED=true;
__utma=187553192.944603223.1301881124.1301881124.1301887705.2;
__utmz=187553192.1301881124.1.1.utmcsr=blog.163.com|utmccn=(referral)|utmcmd=referral|utmcct=/error.do;
USERTRACK=219.243.79.67.1306393576113082;
SID=16552eab-8fda-403b-874f-b199b2b23626;
JSESSIONID=dacwhOfantSjj6j2TM8bt

 

password=123456&type=1&url=http%3A%2F%2Fblog.163.com%2FloginGate.do%3Ftarget%3Dhttp%253A%252F%252Fyangyuankp.blog.163.com%252F%26blogActivation%3Dtrue&product=blog&savelogin=0&username=18932624147@163.com

一般情况下,在流里面已经包含了必要的头信息,POSTDATA等等,所以就直接看这个了!

我们看到Content-Type:
application/x-www-form-urlencoded,这是个必要的头信息,告诉服务器怎么解码。在VB中写对应的:Const
POST_HEADER =
“CONTENT-TYPE:application/x-www-form-urlencoded”。然后我们去找POST地址:

图片 8

在这个POST信息最后是地址,在VB中写:Const
POST_URL =

= “password=123456&type=1&product=blog&savelogin=0&username=18932624147@163.com”这样是不是很清晰啊(参数直间用&连接)。。。万事具备只欠POST了!我们写Inet1.Execute
POST_URL, “POST”, POST_DATA, POST_HEADER。然后等待数据接收完毕 

Do While Inet1.StillExecuting

    DoEvents

  Loop

完成之后获取登录后的主页

Inet1.Execute
“”, “GET”

再等待。。。

    Do While Inet1.StillExecuting

    DoEvents

  Loop

  获取二进制数据,给字节数组

BinBuff() = Inet1.GetChunk(0,
icByteArray)

解析为Unicode 并在text中显示:

Text1.Text = StrConv(BinBuff(),
vbUnicode)

大工造成!这是我们会在text中看到登录成功的源码。。。是不是很简单????有没有自豪感??是不是感觉自己会了很多东西?? 

XMLHTTP用法大同小异,在此就不多说了。(点击下载参考资料以及XMLHTTPQQ申请器源码)

  

看到这,相信你也算一个高手了!我再给读者介绍一点经验和注意事项,就更完美了!

以下是心血经验!!!!!!!!!!!

要注意网页的编码。在用Inet控件传送数据时,直接写就可以(如果没有特殊要求的情况下,像QQ密码,是要加密后再发送的),但是接受时要分情况,如果网页是UTF-8,就要用UTF-8解析二进制数组,这个函数上边QQ留言代码里有。如果是GB2312,就用StrConv(“二进制数组”,VBUnicode)函数来解析,否则中文乱码。

要知道Inet和webbrowser都可以记录cookic,所以不用你管cookic,造成很大便利啊!另外,Inet控件和webbrowser控件的cookic是可以互相使用的,比如你用Inet控件登录成功,在用同一个程序里的webbrowser打开这个网站时,也是登录的状态,反之亦然。在此我很感谢廊坊师范给了我这次磨练的机会!为什么?因为我第一次试验就让我遇到了没有cookie的网站!!!我可是个新手啊!!就不能让我顺利的操作一次嘛??对于没有cookie的网站,登录成功后只能GET主页,如果GET其他的网页马上退出(有cookie的网站直接GET某个存在的页面就可以,不管这个页面在哪),我也想过用webbrowser登录,让它保持对话,然后用Inet进行POST,但是行不通,因为根本没有cookie,这两个控件是联系不上的!经过无数次实验,因为网上没有这方面的文章,所以只有实验!终于成功了!下面讲解一下不能GET其他页面的原因!我们可以分析,为什么在真实操作中点击链接是登录的,而我们模拟GET就是无效的呢?既然这个网站没有cookie,那么它判断我们登录身份的唯一途径就是判断来源页面,如果我们凭空而来,直接GET,肯定是被拒绝的!但如果我们在GET的时候加点参数:在HTTP头里加上referre:xxx(xxx是指登录成功的网页,例子:Inet1.Execute
“”,
“GET”, , “Referer
:”),也就是告诉服务器我是从哪来的,服务器发现你来自于登录成功的页面,也就证明了你的身份。这个猜测最好的证明是你把随便一个登录成功的页面URL复制到一个新的浏览器窗口的地址栏里,点击转到你会发现自己已经退出登录了。。所以,要细心分析参数,少了就出错。。。这个就要靠多实践了。。。

还有需要注意的是如果你登录的页面有跳转,也就是有个中间网页,像loading什么的,登录后,不可以直接去POST其他网页,必须GET一下它自动跳转到的主页,否则你POST别的网页也得不到用户信息,得到的只是一个空架子。可能是这类网站必须通过主页加载一个数据,如果跳过会造成登录成功但没有数据的现象。

要注意POST与GET的区别(如果你早就有这个疑问说明你是真心学习了!):

1、HTTP 只有POST和GET
两种命令模式;

2、POST是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.POST的信息作为HTTP
请求的内容,而GET是在HTTP
头部传输的;所以GET可见但不安全,POST不可见,安全!

3、POST与GET在HTTP
中传送的方式不同,GET的参数是在HTTP 的头部传送的,而Post的数据则是在HTTP
请求的内容里传送;

4、POST传输数据时,不需要在URL中显示出来,而GET方法要在URL中显示;

5、GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M,而根据微软方面的说法,微软对用
Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为
100 KB 字节;

6、SOAP是依赖于HTTP
POST模式实现的;

其实这个经验就与本文无关了,不知道大家有没有注意那个QQ留言的源码里用到了Scriptcontrol控件(控件具体用法说明下载),这个控件是用来在VB运行脚本的,有什么用捏?很有用!比如你在登录一个网页时,人家要求传送的密码用他们的算法加密,但是你哪有这个算法啊。。。。。。别急,去他们网页的JS脚本里边去找这个算法,然后复制到VB中,把代码赋给Scriptcontrol控件就可以运行加密了。

好了,写了这么多。。。。。。真是累啊。。。。。能不能学会,还是在于你自己!努力吧!为了祖国美好的明天!为了社会的进步!加油!

 

 

接着点击Send(发送)界面,如下图,接着按图中黑色按钮就可以抓包了【下图】

如果您往上卷回有關“DNS”的文章﹐看看我們用
nslookup 的 debug 模式查找 www.hinet.ne
t這個網址時候﹐引證一下那裡的內容﹐您就知道這個封包說些什麼了。

 

下面讓我們再看看ICMP封包裡面的內容﹕

图片 9

 

点击黑色按钮开始记录后,将鼠标转移到游戏,在游戏界面按了一下X键(傲剑的打坐快捷键,至于为何选择这个按键,也是经过多次使用的一点小心得,使用X键,点击一下就能看到人物打坐,或者站起身,特别直观)马上按红色按钮停止,看吧,只抓到一个包,太棒了!【下图】不用麻烦找包了(这也是为什么在设置的时候只留下Send的原因了)

图片 10

 

 

图片 11

其實我們真正擷取到的封包內容應該是紅圈的範圍﹐在上面和右邊的欄目裡面的資料是經過程式整理出來的結果。在第一行裡面﹐我們看到“00
80 c7 47 8c 9a 48 54 e8 27 75
77”這串數字﹐所代表的分別是目的地和來源地的MAC地址﹔然後“08
00”代表的是一個Ethernet II的IP協定類型。Ethernet
II可以說是IEEE802.3的改進版本。(還記得“網路概論”裡面關於“邏輯形態”的敘述麼﹖)。這裡可以說是Datalink網路層所要追蹤的資料。

 

然後﹐接下來的是屬於IP封包的內容﹕

 

 

选中刚才抓到的打坐(X)的包,按鼠标右键,选择Set
Send List with this socket
id(设置用这个封包ID到追踪器)后,并无直观表象【下图】

图片 12

图片 13

 

 

請先記著上圖的內容﹐我打算在下一節裡面在詳細討論每一行的意思。

下面以昨天的封包为例来使用一下WPE
点击导入以下封包,选中一个,再点击打开【下图】

IP封包格式

 

首先﹐讓我們看看IP封包的格式是怎樣的﹐和其組成部份﹐以及各部份的長度如何﹕

图片 14

Version (4)

导入后选中3个小勾,接着就可以按黑色按钮进行Send
Settings(发送设置)了,因为是3条,实际就是3个包,所以设置3Time(s),就是3次,Time(定时):100ms(100毫秒),设置完后按右侧黑色按钮发送封包即可【下图】

Internet Header Length
(4)

图片 15

Type of Service
(8)

 

Total Length (16)

可以看到从【襄阳城】传送到了【圆月山庄第三层】【下图】

Identification
(16)

 

Flags (3)

 

Fragment Offset
(13)

好了,基本上就完工了,每次登录游戏都要进行此般操作,或许也有智能工具可以帮助大家更容易的操作封包,在此就不讨论了。当然有兴趣的吧友可能还要自己制作封包,那么我们以上面打坐封包为例吧【下图】

Time To Live (8)

 

Protocol (8)

图片 16

Header checksum
(16)

为了不受怪物的影响,首先回到【襄阳城】
好,在此包上点击鼠标右键,再点击Add to Send List(添加到追踪器)【下图】

Source Address
(32)

 

Destination Address
(32)

图片 17

Options (Variable)

我们选中这个封包,双击还可以更改名字哦,最后Ok(确定)【下图】

Padding (0-24)

 

  
Data
…. 

图片 18

在上圖中﹐括號之內的數字就是各部件的長度(bit)﹐如果您夠細心﹐就會計算得出每一列的總長度都是32bit。下面我們分別對各部件名稱解釋一下﹕

修改名字之后,按黑色按钮进行Send
Settings(发送设置),本来是3次,这里改1次,Time(定时):100ms(100毫秒),设置完后按右侧黑色按钮发送封包【下图】

Version

图片 19

 

 

 

这里已经完成了哦

版本(VER)。表示的是IP規格版本﹐目前的IP規格多為版本4(version
4)﹐所以這裡的數值通常為 0x4 (注意﹕封包使用的數字通常都是十六進位的)。

不过为了让效果更明显,刷新了一下网页,并重新找了开启封包ID,让我们将1次改成Continuously(连续地)(这也是其他连续性封包的设置,比如吃经验),再按黑色按钮开启【下图】

 

图片 20

 

 

Internet Header Length

【细心的朋友应该看到了开启封包ID的变化,因为刷新了网页,就需要重新寻找一下ID】

 

呵呵,看看,此过程连续不断地进行,直到我们点击停止为止【下图】

 

 

標頭長度(IHL)。我們從IP封包規格中看到前面的6列為header﹐如果Options和Padding沒有設定的話﹐也就只有5列的長度﹐所以這裡的長度為“5”﹔我們知道每列有32bit﹐也就是4byte﹔那麼5列就是20byte了﹐20這個數值換成16進位就成了0x14﹐所以﹐當封包標頭長度為最短的時候﹐這裡數值最終會被換算為
0x14 。

 

 

现在到保存封包文件了,点击它就可以保存了【下图】

讓我們看看我們擷取的ICMP封包﹐其中屬於IP部份的開頭﹕

 

 

图片 21

 

假如有不对的地方可以指出,请大家多多指教!

图片 22

 

在這裡﹕我們看到的數值是“45”﹐前面的“4”就是版本號數﹐而後面的“5”則是標頭長度。

 

 

Type of Service

 

 

服務類型(TOS)。這裡指的是IP封包在傳送過程中要求的服務類型﹐其中一共由8個bit組成﹐其中每個bit的組合分別代表不同的意思﹕

 

000….. Routine 設定IP順序﹐預設為0﹐否則﹐數值越高越優先
…0…. Delay 延遲要求﹐0是正常值﹐1為低要求
….0… Throughput 通訊量要求﹐0為正常值﹐1為高要求
…..0.. Reliability 可靠性要求﹐0為正常值﹐1為高要求
……00 Not Used 未使用

在下例中﹐我們可以看到TOS的值為0﹐也就是全部設置為正常值﹕

 

 

图片 23

Total Length

 

 

封包總長(TL)。通常以byte做單位來表示該封包的總長度﹐此數值包括標頭和數據的總和。

 

 

图片 24

 

從上圖我們看到的十六進位數值是“003C”﹐換成十進位就是“60”了。

 

 

Identification

 

 

識別碼(ID)。每一個IP封包都有一個16bit的唯一識別碼。我們從OSI的網路層級知識裡面知道﹕當程式產生的數據要通過網路傳送時﹐都會被拆散成封包形式發送﹐當封包要進行重組的時候﹐這個ID就是依據了。

 

 

图片 25

 

從上圖我們可以看到此封包的ID為﹕40973 (將
a00d 換成十進制就知道了)。

 

 

Flag

 

 

標記(FL)。這是當封包在傳輸過程中進行最佳組合時使用的3個bit的識別記號。請參考下表﹕

 

000. 當此值為0的時候﹐表示目前未被使用。
.0.. 當此值為0的時候﹐表示封包可以被分割﹐如果為1則不能被分割。
..0. 當上一個值為0時﹐此值為0就示該封包是最後一個封包﹐如果為1則表示其後還有被分割的封包。

 

在下例中﹐我們看到這個封包的標記為“0”﹐也就是目前並未使用。

 

 

图片 26

 

 

Fragment Offset

 

 

分割定位(FO)。當封包被切開之後﹐由於網路情況或其它因素影響﹐其抵達順序並不會和當初切割順序一至的。所以當封包進行切割的時候﹐會為各片段做好定位記錄﹐所以在重組的時候﹐就能夠依號入座了。

 

因為我們剛才擷取到的封包並沒有被切割﹐所以﹐暫時找不到例子參考﹔在上例中我們看到的FO為“0”。

 

 

Time To Live

 

 

延續時間(TTL)。這個TTL我們在許多網路設定上都會碰到﹐當一個物件﹐被賦予TTL值(以秒為單位)之後﹐就會進行計時﹐如果物件在到達TTL值的時候還沒被處理的話﹐就會被遺棄。
不過﹐並不是所有的 TTL 都以時間為單位﹐例如 ICMP 協定的
TTL﹐則以封包路由過程中的跳站數目(Hop Count)做單位。TTL
值每經過一個跳站(或被一個 router 處理)之後﹐就會被減低一個數值
。這樣當封包在傳遞過程中由於某些原因而未能抵達目的地的時候﹐就可以避免其一直充斥在網路上面。

 

 

图片 27

 

上圖中我們看到的數值﹐可不是 20
哦﹐因為這是個十六進位數字﹐要換成十進位才知道 TTL 原來是 32
個跳站。

 

 

Protocol

 

 

協定(PROT)。這裡指的是該封包所使用的網路協定類型﹐例如﹕ICMP﹑DNS等。要注意的是﹕這裡使用的協定是網路層的協定﹐這和上層的程式協定(如﹕FTP﹑POP等)是不同的。您可以從Linux的/etc/protocol這個檔案中找到這些協定和其代號﹔此檔案也存放於NT的\winnt\system32\drivers\etc目錄裡面。其內容如下﹕

------------------------------------------------------
ip      0       IP              # internet protocol, pseudo protocol number
icmp    1       ICMP            # internet control message protocol
igmp    2       IGMP            # Internet Group Management
ggp     3       GGP             # gateway-gateway protocol
ipencap 4       IP-ENCAP        # IP encapsulated in IP (officially ``IP'')
st      5       ST              # ST datagram mode
tcp     6       TCP             # transmission control protocol
egp     8       EGP             # exterior gateway protocol
pup     12      PUP             # PARC universal packet protocol
udp     17      UDP             # user datagram protocol
hmp     20      HMP             # host monitoring protocol
xns-idp 22      XNS-IDP         # Xerox NS IDP
rdp     27      RDP             # "reliable datagram" protocol
iso-tp4 29      ISO-TP4         # ISO Transport Protocol class 4
xtp     36      XTP             # Xpress Tranfer Protocol
ddp     37      DDP             # Datagram Delivery Protocol
idpr-cmtp       39      IDPR-CMTP       # IDPR Control Message Transport
rspf    73      RSPF            #Radio Shortest Path First.
vmtp    81      VMTP            # Versatile Message Transport
ospf    89      OSPFIGP         # Open Shortest Path First IGP
ipip    94      IPIP            # Yet Another IP encapsulation
encap   98      ENCAP           # Yet Another IP encapsulation
------------------------------------------------------

 

 

图片 28

 

在我們這個例子中﹐可以看得出PROT的號碼為“01”﹐對照/etc/protocol檔案﹐我們可以知道這是一個ICMP協定。

 

 

Header Checksum

 

 

標頭檢驗值(HC)。這個數值主要用來檢錯用的﹐用以確保封包被正確無誤的接收到。當封包開始進行傳送後﹐接收端主機會利用這個檢驗值會來檢驗餘下的封包﹐如果一切看來無誤﹐就會發出確認信息﹐表示接收正常。

 

 

图片 29

 

上圖中我們看到的封包之HC為﹕“9049”。

 

 

Source IP Address

 

 

來源地址(SA)。相信這個不用多解釋了﹐就是發送端的IP地址是也。

 

 

图片 30

 

我們將“c0.a8.00.0f”換成十進位﹐就可以得出“192.168.0.15”這個地址了。

 

 

Destination IP Address

 

 

目的地址(DA)。也就是接收端的IP地址啦。

 

 

图片 31

 

看看﹐你能不能將“a8.5f.01.54”換成“168.95.1.84”﹖

 

 

Options & Padding

 

 

這兩個選項甚少使用﹐只有某些特殊的封包需要特定的控制﹐才會利用到。這裡也不作細表啦。

 

 

图片 32

 

 

图片 33


www.study-area.org ©
2001 Netman
網中人
Last Updated:
April 26, 2001

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图