最近在编一个通过代理实现网页模拟点击和POST的Internet程序

博主想用socket实现网页模拟点击和表单POST,可用于做邮箱客户端等。因学业繁忙未完成。博主采用socket编程,介绍了用其与代理服务器建立TCP连接、构造HTTP头文件向代理服务器请求页面的方法,还提及获取完整内容需模拟浏览器获取图片链接。
初步的思想是想用socket来实现网页的模拟点击和表单的POST
至于有什么用这个就很难讲了,大家可以做一个基于WEB的邮箱客户端,也可以做一个半自动的申请器,当然也可以用到别的地方去,但是现在我现在实在没有时间来完成它,原因很简单,因为我今年大四,接下来要参加全国软件水平的软件设计师考试,郁闷,上次下午过了,上午还差一点。还要完成一个毕业设计,是一个基于NDIS的网络数据监测控制软件,这个头有点大了,还没着手,准备就快要开始了,自己给自己一个最后的期限就是明天开始。还有CET-6和教师资格证,晕啊,时间不够了!
现面来说点自己这几天编程的经验。在优快云中看到有位高人说这个网络程序可以用很多方法来做,我也试过用WININET,但是感觉以后自己来驾驭它会很困难,越是底层的东西就越好控制,当然还有很多可以用的技术,比如WINHTTP,或者COM,但是我没这么好的基础,慢慢学嘛,所以我就采用了socket来实现。有经验的程序员肯定不会有很大的问题,不过我也还是初学者,所以当然走了很多很多的弯路,用了很多很多的时间来整理各种各样的资料。呵呵,有点跑题了,不说这个了..
我发现使用网络数据截获软件可以很方便的观察数据包的收发过程,连一个CONNECT函数都有相应的状态数据包,具体研究如下:

首先,我建立一个SOCKET,然后,使用一个CONNECT,连接到代理服务器及其端口上,当然前提是你的代理服务器支持CONNECT(大部分HTTP代理可以支持CONNECT),成功后服务器返回一个确认信号,这个信号中包含了第二次握手信息,请求我的机器的确认,于是我的机器就给它一个确认的信号。这样两次握手完成,建立了一个基于TCP的连接。

看图:

step1 Source IP =====> Destination IP SYN: 1 (请求连接标志)
step2 Source IP <===== Destination IP ACK: 1 (连接确认标志) SYN: 1 (再次请求连接标志)
step3 Source IP =====> Destination IP ACK: 1 (连接确认标志)

有连接就好了,这样就可以想代理服务器IP发送数据包了,不熟悉HTTP协议的朋友请去看看相关的RFC1945,英文不好的也可以去看中文的RFC,给出链接如下:点击 http://www.leepig.com/rfc/RFC1945.txt。
具体的我不多说了,来看看怎么构造HTTP头文件吧。现面给出一个例子。

Version: HTTP/1.0
Method: GET
URI: http://www.163.com/
Accept: */*
Accept-Language: zh-cn
Cookie: ******
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)
Host: www.163.com
Proxy-Connection: Keep-Alive

使用建立好的SOCKET函数发送这个头文件这样就可以向代理服务器请求www.163.com的页面了。但是在程序中怎么发送呢?看了RFC文档的就没问题了,如果还不明白,那我只好说一点了,不说具体的方法,说点实质的东西。

发送括号里的内容给代理服务器 (GET http://www.163.com/ HTTP/1.0 /r/nAccept: */*/r/nAccept-Language: zh-cn/r/nCookie: ******/r/nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)/r/nHost: www.163.com/r/nProxy-Connection: Keep-Alive/r/n/r/n)

这里有特别注意的几点,也是我的失败的经验:******就是这个网站建立的COOKIE,大家可以到系统盘符下面去查看,当然也可以有别的办法获得。网站请求的URL必须要以“/”结尾,不然得不到这个网址得HTML代码,特别注意,换行符使用“/r/n”,最后一定要有两个“/r/n”,不然也会发生错误的。

如果没有别的问题这样就可以了,应该能用RECEIVE函数来获得返回的HTTP头文件和HTML代码了,不过这样不是很完美,如果你要最完美的获得所有的内容,就要完全的模拟浏览器来获得所有的图片的连接,那么呵呵就要这么做,分析获得的HTML代码,在获得的代码中如果有超链接标志的,那么就把这个超链接获得出来,再建立一个SOCKET来发送一个类似于上面描述的HTTP头到代理服务器,就这样每碰到一个就发送一个SESSION,这才是真正的模拟,呵呵。
可惜现在很多人都不肯说,大家忙嘛,没办法,可是这个不是理由,关键是你想不想帮别人,我会不断发我的经验的,要相关资料的朋友请发送EMAIL到rikzjy@gmail.com,我很乐意帮助你们做你们的朋友,最后祝大家愉快!

各位网友大家好,要运行此工具必需先设置好网页信息,点击菜单栏设置或用捷键(Alt+E)进入到设置页面,设置页面其中包括三个Tab:基本配置、网页信息数据库。基本配置:如果要运行页面点击时自动刷新外网IP就要配置ADSL帐号,现在暂时只支持ADSL刷新外网IP。单独页面执行是已Html中div的id为标志,意思是循环只执行此选中项,默认是所有项目。IP数据表就是每执行一下点击网页都会记录下本次的IP,记录文件放在此工具的路径下的Data目录下的iptables.log文件,最小化启动程序就是启动此工具或最小化窗口后台托管运行,就像QQ一样挂着。循环重启软件运行此项是为了刷新ADSL一起配合产生独立IP,因为每个浏览器都有Cookies,关闭浏览器就可以彻底清除Cookies产生独立访客(UV)了。如果同时选择了最小化启动程序可以用全局捷键Ctrl+Alt+空格解除循环。网页信息:是一个表格可以进行添加、修改删除。页面执行方式有两种:一是completed意思是等网页加载完毕后执行点击,二是thread多线程执行意思是加载页面3秒钟后再执行页面点击。各有各自的优点,如果发现其中一种执行方式实现不了可以用另外一种试一下。类型就是网页的链接返回类型,有两种一时纯url链接如:http://www.baidu.com,另一种是数据库SQL语句返回链接集。用数据库名加@加地址标志,在数据库Tab中配置。SQL语句一定要返回link结果集如:select concat('http://www.google.com/', url) link from table,在SQL语句中不要用双引号,要用单引号,否则会出错。现在支持MYSQLMSSQL数据库。链接就是类型对应的文本。htmlID是html中div的id,这个是网站网页中要点击的定位点,是这个表的主键必须唯一。偏移坐标就是htmlID的相对偏移点,用英文逗号隔开如0,0。状态有两种YN,意思是是否,默认是Y,就是如果您想停用此条记录不加入循环就改为N。独立IP,默认是N,就是在Data/iptables.log文件中没出现过的当为独立ip。双击单元格可以修改文本内容。点击最后的删除可以删除此行记录。修改或添加后可别忘记了按右下角的保存按钮哦。数据库tab表格简单明了就不多加说明了。如果有出现运行异常可以可以查看Data下的error.log错误日志文件。如果对此工具有何意见或建议可以点击意见反馈发送你的宝贵信息。此工具支持在线更新。如收到您的来信,我会尽的修改更新。温馨提示:目标执行标签(htmlID)要保持在预览窗口显示,建议最大化窗口最小化后台托管运行。希望此工具可以帮得了大家。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值