初识Socket之构造接受包的简易程序(C语言实习)

来源:互联网 发布:打开矢量图的软件 编辑:程序博客网 时间:2024/05/16 23:46

    以前一直没有碰过Socket的程序,我一直很难理解它的运行机理,偶尔尝试下C/S模式的聊天类型程序都恨费解这种绑定来绑定去的模式,以前略有接触PHP和MFC,都有相关的直接连接URL的函数或者类,估计是因为人家比较高层,C语言比较底层的原因(有些人肯定要抱怨汇编了),以前也对数据包有种莫名其妙的恐惧,对抓包、分析包这种避而远之,所以对Socket的学习一直拖延到现在。最近由于老师给了个项目,是关于对各种各样的包做各种各样分析的软件,顿时亚历山大,又恰巧今晚想渗透一个网站,但是它设置的SQL过滤灰常奇葩,表名也灰常另类,给手注带来了极大的麻烦,于是我就综合以上多种原因,想想写个跑表的C程序出来,当然截止写完这篇博客,这个程序还是没有写完,但是总体框架是有了,具体的细节到时候更改下就行。

    Socket 从初始化到绑定的流程和具体我就不说了把,关键讲讲这个构造包和发送包的问题,这里涉及到两个很牛逼的函数——Send()和Recv(),顾名思义,前者是发送,否则是接收。在来看看包的结构,由于我的初衷是向这个URL提交参数,于是我考虑到发送GET包,如果这里各位不怎么懂啥是GET、POST、HTTP响应包之类格式的,请您百度,或者等我N期以后的对这些包的简单总结或者带着这个小疑问往下看。因此我在这里只是介绍下GET包的构造。

    以下是我找到的一张比较能说明问题的HTTP请求包的格式、用WireShark抓取的GET包和相对应构造的GET包,大家可以对比下。

    

                                  图1  HTTP请求包的格式

图2 用WireShark抓取的GET包

strcat(Header,"GET ");    strcat(Header,GET);    strcat(Header," HTTP/1.1\r\n");    strcat(Header,"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n");    strcat(Header,"Accept-Language: zh-CN,zh;q=0.8\r\n");    strcat(Header,"User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.56 Safari/536.5\r\n");    strcat(Header,"Accept-Encoding: gzip,deflate,sdch\r\n");    strcat(Header,"Host: ");    strcat(Header,host);    strcat(Header,"\r\n");strcat(Header,"Connection: Keep-Alive\r\n\r\n");

代码1 构造的GET包

    对比三张图,能够很容易明白如何构造一个包了把,构造完包然后做啥?Send给服务器呗,然后就等着用Recv接收包顺便处理处理吧。

    相对应的源代码我就不贴出来了,需要的朋友可以留言或者私信哈。

    因为是第一次成功的用了Socket,还有抓包神马的比较兴奋,程序还没完成,明天继续,如果有啥新的体会,我会继续贴出来共享共享的。

    感谢一些朋友给我的demo,我才能把这些东西结合的写出来。

原创粉丝点击