当前位置:首页 » 操作系统 » http协议源码

http协议源码

发布时间: 2022-08-17 12:52:38

㈠ 远程访问用的是http协议,下面是源代码

结论:①string URi = "http://192.168.0.105//www/";
URi的值应该是一个URL地址吧,怎么105后面有两个/
②你这样的访问方式涉及到客户端对服务器端的访问权限问题,我没试过以这样的方式将文件上传到服务器的,而且我觉得应该不是这样的方式。
解决方案建议:
①可以在服务器端开通ftp功能,将文件发送到ftp里,代码如下:
privatevoidbutton1_Click(objectsender,EventArgse)

{

WebClientw=newWebClient();

w.Credentials=newNetworkCredential("sa","sa");//登陆ftp的用户名密码

w.UploadFile("ftp://221.224.78.82/skdb/up.xls",@"e:\1.xls");////前面是远程ftp文件夹路径后面是:本地上传的文件路径

w.Dispose();

MessageBox.Show("上传成功!");

}

②服务器端有IIS的话通过WebService的方式实现文件上传
这个方法相对比较复杂,建议用第一种,如果要采用这种的话到时我再发一个例子给你⊙﹏⊙

㈡ delphi HTTP协议取网页源码

以下方法就是DELPHI的


uses UrlMon; //urlmon包含urldownloadtofile函数

使用如下方法下载

UrlDownloadToFile(nil, PChar('http://www..com/'), PChar('index.htm'), 0, nil);

㈢ 网络编程什么是http协议http常用的请求方法是什么

目前通用的编程语言有两种形式:汇编语言和高级语言。

汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。汇编程序通常由三部分组成:指令、伪指令和宏指令。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。

高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。同时,由于省略了很多细节,编程者也就不需要有太多的专业知识。

高级语言主要是相对于汇编语言而言,它并不是特指某一种具体的语言,而是包括了很多编程语言,如目前流行的VB、VC、FoxPro、Delphi等,这些语言的语法、命令格式都各不相同。

高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类:

解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。

编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的,例如Visual C++、Visual Foxpro、Delphi等。

㈣ HTTP协议是什么意思

HTTP协议指的是超文本传输协议。

超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本。这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会和互联网工程工作小组共同合作研究,最终发布了一系列的RFC,其中着名的RFC 2616定义了HTTP 1.1。

(4)http协议源码扩展阅读:

HTTP协议的主要特点:

1、简单快速

客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、POST,每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

2、无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

3、无状态

HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

㈤ 使用HTTP协议实现文件批量传输从A服务器到B服务器。要求有客户端和服务端。希望给出成功源码参考。

就算你给15块也没人给你做。

㈥ HTTP,SSL/TLS和HTTPS协议的区别与联系

概述:HTTP是普通明文传输协议,HTTPS是加密协议,相当于HTTP的安全版本,但需要HTTPS加密必须拥有SSL证书与TLS协议交流产生,SSL证书在线签发:网页链接

1、“HTTP”是什么?

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法(具体可查看马海祥博客《深入解析互联网协议的原理》的相关介绍)。

1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。

简单来说,HTTP就是一个网络协议,是专门用来帮你传输Web内容的,关于这个协议,就算你不了解,至少也听说过吧?比如你访问我的博客的主页,浏览器地址栏会出现的网址:http://www.mahaixiang.cn,大部分网站都是通过HTTP协议来传输Web页面、以及Web页面上包含的各种东东(图片、CSS 样式、JS 脚本)。

2、“SSL/TLS”是什么?

SSL是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”,它是在上世纪90年代中期,由网景公司设计的(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)。

为啥要发明SSL这个协议捏?因为原先互联网上使用的HTTP协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改,发明SSL协议,就是为了解决这些问题。

到了1999年,SSL因为应用广泛,已经成为互联网上的事实标准,IETF就在那年把SSL标准化,标准化之后的名称改为TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。

很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。

3、“HTTPS”是什么意思?

解释完 HTTP 和 SSL/TLS,现在就可以来解释 HTTPS 啦,咱们通常所说的 HTTPS 协议,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合,你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)。

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

它是一个URI scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。

https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间),这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

4、谈谈“对称加密”和“非对称加密”的概念

如果我们想搞明白“对称加密”和“非对称加密”的概念,首先,我们就要先知道什么是“加密”和“解密”?

(1)、什么是“加密”和“解密”?

通俗而言,你可以把“加密”和“解密”理解为某种互逆的数学运算,就好比“加法和减法”互为逆运算、“乘法和除法”互为逆运算。

“加密”的过程,就是把“明文”变成“密文”的过程;反之,“解密”的过程,就是把“密文”变为“明文”,在这两个过程中,都需要一个关键的东东——叫做“密钥”——来参与数学运算。

(2)、什么是“对称加密”?

所谓的“对称加密技术”,意思就是说:“加密”和“解密”使用相同的密钥。这个比较好理解,就好比你用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包,当你下次要把这个压缩文件解开的时候,你需要输入同样的密码,在这个例子中,密码/口令就如同刚才说的“密钥”。

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法,对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

(3)、什么是“非对称加密”?

所谓的“非对称加密技术”,意思就是说:“加密”和“解密”使用不同的密钥,这玩意儿比较难理解,也比较难想到,当年“非对称加密”的发明,还被誉为“密码学”历史上的一次革命。

非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key),私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人,非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。

由于篇幅有限,对“非对称加密”这个话题,我就不展开了,有空的话,我会再单独写一篇文章在马海祥博客上发布。

(4)、各自有啥优缺点?

看完刚才的定义,很显然:(从功能角度而言)“非对称加密”能干的事情比“对称加密”要多,这是“非对称加密”的优点,但是“非对称加密”的实现,通常需要涉及到“复杂数学问题”,所以,“非对称加密”的性能通常要差很多(相对于“对称加密”而言)。

这两者的优缺点,也影响到了 SSL 协议的设计。

5、HTTP协议的特点

作为背景知识介绍,还需要再稍微谈一下 HTTP 协议本身的特点,HTTP本身有很多特点,考虑到篇幅有限,马海祥只谈那些和HTTPS相关的特点,想要了解更深入的HTTP知识,可查看马海祥博客《HTTP服务的七层架构技术解析及运用》的相关介绍。

(1)、HTTP的版本和历史

如今咱们用的 HTTP 协议,版本号是 1.1(也就是 HTTP 1.1),这个 1.1 版本是1995年底开始起草的(技术文档是RFC2068),并在1999年正式发布(技术文档是RFC2616)。

在 1.1 之前,还有曾经出现过两个版本“0.9 和 1.0”,其中的 HTTP 0.9 没有被广泛使用,而 HTTP 1.0 被广泛使用过。

(2)、HTTP 和 TCP 之间的关系

简单地说,TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据。

在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。

有很多常见的应用层协议是以 TCP 为基础的,比如“FTP、SMTP、POP、IMAP”等。

TCP被称为“面向连接”的传输层协议,关于它的具体细节,俺就不展开了(否则篇幅又失控了),你只需知道:传输层主要有两个协议,分别是TCP和UDP,TCP比UDP更可靠,你可以把 TCP 协议想象成某个水管,发送端这头进水,接收端那头就出水,并且 TCP 协议能够确保,先发送的数据先到达(与之相反,UDP不保证这点)。

(3)、HTTP协议如何使用 TCP 连接?

HTTP对 TCP 连接的使用,分为两种方式:俗称“短连接”和“长连接”(“长连接”又称“持久连接”,叫做“Keep-Alive”或“Persistent Connection”)

假设有一个网页,里面包含好多图片,还包含好多外部的CSS文件和JS文件,在“短连接”的模式下,浏览器会先发起一个 TCP 连接,拿到该网页的 HTML 源代码(拿到 HTML 之后,这个 TCP 连接就关闭了)。然后,浏览器开始分析这个网页的源码,知道这个页面包含很多外部资源(图片、CSS、JS)。然后针对每一个外部资源,再分别发起一个个 TCP 连接,把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开)。

相反,如果是“长连接”的方式,浏览器也会先发起一个 TCP 连接去抓取页面,但是抓取页面之后,该 TCP 连接并不会立即关闭,而是暂时先保持着(所谓的“Keep-Alive”),然后浏览器分析 HTML 源码之后,发现有很多外部资源,就用刚才那个 TCP 连接去抓取此页面的外部资源。

在 HTTP 1.0 版本,默认使用的是“短连接”(那时候是 Web 诞生初期,网页相对简单,“短连接”的问题不大)。

到了1995年底开始制定 HTTP 1.1 草案的时候,网页已经开始变得复杂(网页内的图片、脚本越来越多了),这时候再用短连接的方式,效率太低下了(因为建立 TCP 连接是有“时间成本”和“CPU成本”),所以,在 HTTP 1.1 中,默认采用的是“Keep-Alive”的方式。

6、SSL/TLS协议的基本运行过程

SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密,但是这里有两个问题:

(1)、如何保证公钥不被篡改?

解决方法:将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。

(2)、公钥加密计算量太大,如何减少耗用的时间?

解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。

因此,SSL/TLS协议的基本过程是这样的:

(1)、客户端向服务器端索要并验证公钥。

(2)、双方协商生成“对话密钥”。

(3)、双方采用“对话密钥”进行加密通信。

7、SSL、HTTP和HTTPS协议的联系

SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5 以及RSA等加密算法,使用40位的密钥,适用于商业信息的加密。

同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是SSL over HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。

然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。

假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别,所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得(具体可查看马海祥博客《从SEO的角度来分析网站是否该采用HTTPS协议》的相关介绍)。

总之不需要用https的地方,就尽量不要用。

8、HTTPS协议的需求是什么?

花了好多口水,终于把背景知识说完了,下面正式进入正题,先来说说当初设计HTTPS是为了满足哪些需求?

很多介绍 HTTPS 的文章一上来就给你讲实现细节,对此,马海祥觉得这是不好的做法,一上来就给你讲协议细节,你充其量只能知道如何做,无法理解为什么,我在前一个章节讲了“背景知识”,在这个章节讲了“需求”,这就有助于你理解了。

为什么要设计成这样?——这就是 WHY 型的问题。

(1)、兼容性

因为是先有 HTTP 再有 HTTPS,所以,HTTPS 的设计者肯定要考虑到对原有 HTTP 的兼容性。

这里所说的兼容性包括很多方面,比如已有的 Web 应用要尽可能无缝地迁移到 HTTPS;比如对浏览器厂商而言,改动要尽可能小。

基于“兼容性”方面的考虑,很容易得出如下几个结论:

①、HTTPS还是要基于 TCP 来传输

如果改为 UDP 作传输层,无论是 Web 服务端还是浏览器客户端,都要大改,动静太大了。

②、单独使用一个新的协议,把 HTTP 协议包裹起来

所谓的“HTTP over SSL”,实际上是在原有的 HTTP 数据外面加了一层 SSL 的封装,HTTP 协议原有的 GET、POST 之类的机制,基本上原封不动。

打个比方:如果原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管,一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。

(2)、可扩展性

前面说了,HTTPS 相当于是“HTTP over SSL”。

如果 SSL 这个协议在“可扩展性”方面的设计足够牛逼,那么它除了能跟 HTTP 搭配,还能够跟其它的应用层协议搭配,岂不美哉?

现在看来,当初设计 SSL 的人确实比较牛,如今的 SSL/TLS 可以跟很多常用的应用层协议(比如:FTP、SMTP、POP、Telnet)搭配,来强化这些应用层协议的安全性。

接着刚才打的比方:如果把 SSL/TLS 视作一根用来加固的金属管,它不仅可以用来加固输水的管道,还可以用来加固输煤气的管道。

(3)、保密性(防泄密)

HTTPS需要做到足够好的保密性。

说到保密性,首先要能够对抗嗅探(行话叫 Sniffer),所谓的“嗅探”,通俗而言就是监视你的网络传输流量,如果你使用明文的 HTTP 上网,那么监视者通过嗅探,就知道你在访问哪些网站的哪些页面。

嗅探是最低级的攻击手法,除了嗅探,HTTPS 还需要能对抗其它一些稍微高级的攻击手法——比如“重放攻击”(后面讲协议原理的时候,会再聊)。

(4)、完整性(防篡改)

除了“保密性”,还有一个同样重要的目标是“确保完整性”。

在发明 HTTPS 之前,由于 HTTP 是明文的,不但容易被嗅探,还容易被篡改。

举个例子:比如咱们的网络运营商(ISP)都比较流氓,经常有网友抱怨说访问某网站(本来是没有广告的),竟然会跳出很多中国电信的广告,为啥会这样呢?因为你的网络流量需要经过 ISP 的线路才能到达公网,如果你使用的是明文的 HTTP,ISP 很容易就可以在你访问的页面中植入广告。

所以,当初设计 HTTPS 的时候,还有一个需求是“确保 HTTP 协议的内容不被篡改”。

(5)、真实性(防假冒)

在谈到 HTTPS 的需求时,“真实性”经常被忽略,其实“真实性”的重要程度不亚于前面的“保密性”和“完整性”。

举个例子:你因为使用网银,需要访问该网银的 Web 站点,那么,你如何确保你访问的网站确实是你想访问的网站?

有些天真的同学会说:通过看网址里面的域名,来确保,为啥说这样的同学是“天真的”?因为 DNS 系统本身是不可靠的(尤其是在设计 SSL 的那个年代,连 DNSSEC 都还没发明),由于 DNS 的不可靠(存在“域名欺骗”和“域名劫持”),你看到的网址里面的域名未必是真实滴!

所以,HTTPS 协议必须有某种机制来确保“真实性”的需求(至于如何确保,后面会细聊)。

9、HTTPS和HTTP的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。

为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

一般来说,HTTPS和HTTP的区别主要为以下四点:

(1)、https协议需要到ca申请证书,一般免费证书很少,需要交费。

(2)、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

(3)、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

(4)、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全(具体可查看马海祥博客《HTTP与HTTPS的区别》的相关介绍)。

10、HTTPS和HTTP的性能比较

再来说最后一个需求——性能。

本来简单的http协议,一个get一个response,由于https要还密钥和确认加密算法的需要,单握手就需要6、7个往返,任何应用中,过多的round trip肯定影响性能,接下来才是具体的http协议,每一次响应或者请求,都要求客户端和服务端对会话的内容做加密/解密。

尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL芯片,如果CPU信能比较低的话,肯定会降低性能,从而不能serve更多的请求,加密后数据量的影响,所以,才会出现那么多的安全认证提示(具体可查看马海祥博客《HTTPS对网站性能优化的影响》的相关介绍)。

一般来说,引入HTTPS之后,不能导致性能变得太差,否则的话,谁还愿意用?

为了确保性能,SSL 的设计者至少要考虑如下几点:

(1)、如何选择加密算法(“对称”or“非对称”)?

(2)、如何兼顾 HTTP 采用的“短连接”TCP 方式?

SSL 是在1995年之前开始设计的,那时候的 HTTP 版本还是 1.0,默认使用的是“短连接”的 TCP 方式——默认不启用 Keep-Alive。

HTTPS的关键性能影响是CPU和往返,如果CPU很强的话,性能可能就是有人讲的80%;如果cpu是瓶颈的话,有人讲原来可以server330-500个请求每秒,现在只有30-50%,因此在使用https请求数据的时候要注意看看你的项目里面是否真的需要。

㈦ http协议解析 请求行的信息怎么提取 c语言源码

实现步骤:
1)用Wireshark软件抓包得到test.pcap文件
2)程序:分析pcap文件头 -> 分析pcap_pkt头 -> 分析帧头 -> 分析ip头 -> 分析tcp头 -> 分析http信息
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<netinet/in.h>
#include<time.h>
#define BUFSIZE 10240
#define STRSIZE 1024
typedef long bpf_int32;
typedef unsigned long bpf_u_int32;
typedef unsigned short u_short;
typedef unsigned long u_int32;
typedef unsigned short u_int16;
typedef unsigned char u_int8;
//pacp文件头结构体
struct pcap_file_header
{
bpf_u_int32 magic; /* 0xa1b2c3d4 */
u_short version_major; /* magjor Version 2 */
u_short version_minor; /* magjor Version 4 */
bpf_int32 thiszone; /* gmt to local correction */
bpf_u_int32 sigfigs; /* accuracy of timestamps */
bpf_u_int32 snaplen; /* max length saved portion of each pkt */
bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */
};
//时间戳
struct time_val
{
long tv_sec; /* seconds 含义同 time_t 对象的值 */
long tv_usec; /* and microseconds */
};
//pcap数据包头结构体
struct pcap_pkthdr
{
struct time_val ts; /* time stamp */
bpf_u_int32 caplen; /* length of portion present */
bpf_u_int32 len; /* length this packet (off wire) */
};
//数据帧头
typedef struct FramHeader_t
{ //Pcap捕获的数据帧头
u_int8 DstMAC[6]; //目的MAC地址
u_int8 SrcMAC[6]; //源MAC地址
u_short FrameType; //帧类型
} FramHeader_t;
//IP数据报头
typedef struct IPHeader_t
{ //IP数据报头
u_int8 Ver_HLen; //版本+报头长度
u_int8 TOS; //服务类型
u_int16 TotalLen; //总长度
u_int16 ID; //标识
u_int16 Flag_Segment; //标志+片偏移
u_int8 TTL; //生存周期
u_int8 Protocol; //协议类型
u_int16 Checksum; //头部校验和
u_int32 SrcIP; //源IP地址
u_int32 DstIP; //目的IP地址
} IPHeader_t;
//TCP数据报头
typedef struct TCPHeader_t
{ //TCP数据报头
u_int16 SrcPort; //源端口
u_int16 DstPort; //目的端口
u_int32 SeqNO; //序号
u_int32 AckNO; //确认号
u_int8 HeaderLen; //数据报头的长度(4 bit) + 保留(4 bit)
u_int8 Flags; //标识TCP不同的控制消息
u_int16 Window; //窗口大小
u_int16 Checksum; //校验和
u_int16 UrgentPointer; //紧急指针
}TCPHeader_t;
//
void match_http(FILE *fp, char *head_str, char *tail_str, char *buf, int total_len); //查找 http 信息函数
//
int main()
{
struct pcap_file_header *file_header;
struct pcap_pkthdr *ptk_header;
IPHeader_t *ip_header;
TCPHeader_t *tcp_header;
FILE *fp, *output;
int pkt_offset, i=0;
int ip_len, http_len, ip_proto;
int src_port, dst_port, tcp_flags;
char buf[BUFSIZE], my_time[STRSIZE];
char src_ip[STRSIZE], dst_ip[STRSIZE];
char host[STRSIZE], uri[BUFSIZE];
//初始化
file_header = (struct pcap_file_header *)malloc(sizeof(struct pcap_file_header));
ptk_header = (struct pcap_pkthdr *)malloc(sizeof(struct pcap_pkthdr));
ip_header = (IPHeader_t *)malloc(sizeof(IPHeader_t));
tcp_header = (TCPHeader_t *)malloc(sizeof(TCPHeader_t));
memset(buf, 0, sizeof(buf));
//
if((fp = fopen(“test.pcap”,”r”)) == NULL)
{
printf(“error: can not open pcap file\n”);
exit(0);
}
if((output = fopen(“output.txt”,”w+”)) == NULL)
{
printf(“error: can not open output file\n”);
exit(0);
}
//开始读数据包
pkt_offset = 24; //pcap文件头结构 24个字节
while(fseek(fp, pkt_offset, SEEK_SET) == 0) //遍历数据包
{
i++;
//pcap_pkt_header 16 byte
if(fread(ptk_header, 16, 1, fp) != 1) //读pcap数据包头结构
{
printf(“\nread end of pcap file\n”);
break;
}
pkt_offset += 16 + ptk_header->caplen; //下一个数据包的偏移值
strftime(my_time, sizeof(my_time), “%Y-%m-%d %T”, localtime(&(ptk_header->ts.tv_sec))); //获取时间
// printf(“%d: %s\n”, i, my_time);
//数据帧头 14字节
fseek(fp, 14, SEEK_CUR); //忽略数据帧头
//IP数据报头 20字节
if(fread(ip_header, sizeof(IPHeader_t), 1, fp) != 1)
{
printf(“%d: can not read ip_header\n”, i);
break;
}
inet_ntop(AF_INET, (void *)&(ip_header->SrcIP), src_ip, 16);
inet_ntop(AF_INET, (void *)&(ip_header->DstIP), dst_ip, 16);
ip_proto = ip_header->Protocol;
ip_len = ip_header->TotalLen; //IP数据报总长度
// printf(“%d: src=%s\n”, i, src_ip);
if(ip_proto != 0×06) //判断是否是 TCP 协议
{
continue;
}
//TCP头 20字节
if(fread(tcp_header, sizeof(TCPHeader_t), 1, fp) != 1)
{
printf(“%d: can not read ip_header\n”, i);
break;
}
src_port = ntohs(tcp_header->SrcPort);
dst_port = ntohs(tcp_header->DstPort);
tcp_flags = tcp_header->Flags;
// printf(“%d: src=%x\n”, i, tcp_flags);
if(tcp_flags == 0×18) // (PSH, ACK) 3路握手成功后
{
if(dst_port == 80) // HTTP GET请求
{
http_len = ip_len – 40; //http 报文长度
match_http(fp, “Host: “, “\r\n”, host, http_len); //查找 host 值
match_http(fp, “GET “, “HTTP”, uri, http_len); //查找 uri 值
sprintf(buf, “%d: %s src=%s:%d dst=%s:%d %s%s\r\n”, i, my_time, src_ip, src_port, dst_ip, dst_port, host, uri);
//printf(“%s”, buf);
if(fwrite(buf, strlen(buf), 1, output) != 1)
{
printf(“output file can not write”);
break;
}
}
}
} // end while
fclose(fp);
fclose(output);
return 0;
}
//查找 HTTP 信息
void match_http(FILE *fp, char *head_str, char *tail_str, char *buf, int total_len)
{
int i;
int http_offset;
int head_len, tail_len, val_len;
char head_tmp[STRSIZE], tail_tmp[STRSIZE];
//初始化
memset(head_tmp, 0, sizeof(head_tmp));
memset(tail_tmp, 0, sizeof(tail_tmp));
head_len = strlen(head_str);
tail_len = strlen(tail_str);
//查找 head_str
http_offset = ftell(fp); //记录下HTTP报文初始文件偏移
while((head_tmp[0] = fgetc(fp)) != EOF) //逐个字节遍历
{
if((ftell(fp) – http_offset) > total_len) //遍历完成
{
sprintf(buf, “can not find %s \r\n”, head_str);
exit(0);
}
if(head_tmp[0] == *head_str) //匹配到第一个字符
{
for(i=1; i<head_len; i++) //匹配 head_str 的其他字符
{
head_tmp[i]=fgetc(fp);
if(head_tmp[i] != *(head_str+i))
break;
}
if(i == head_len) //匹配 head_str 成功,停止遍历
break;
}
}
// printf(“head_tmp=%s \n”, head_tmp);
//查找 tail_str
val_len = 0;
while((tail_tmp[0] = fgetc(fp)) != EOF) //遍历
{
if((ftell(fp) – http_offset) > total_len) //遍历完成
{
sprintf(buf, “can not find %s \r\n”, tail_str);
exit(0);
}
buf[val_len++] = tail_tmp[0]; //用buf 存储 value 直到查找到 tail_str
if(tail_tmp[0] == *tail_str) //匹配到第一个字符
{
for(i=1; i<tail_len; i++) //匹配 head_str 的其他字符
{
tail_tmp[i]=fgetc(fp);
if(tail_tmp[i] != *(tail_str+i))
break;
}
if(i == tail_len) //匹配 head_str 成功,停止遍历
{
buf[val_len-1] = 0; //清除多余的一个字符
break;
}
}
}
// printf(“val=%s\n”, buf);
fseek(fp, http_offset, SEEK_SET); //将文件指针 回到初始偏移
}

㈧ "http"的含义

它是超文本传输议(Hyper Text Transport Protocol,简称HTTP )是WWW所采用的标准传输协议。它的作用是提供浏览器与WWW服务器之间的通信。每一次交互包括一个ASCII形式的请求,和一个与RFC 822类似的MIME的应答。HTTP通常建立在TCP基础上,而在ATM网络中,将基于AAL5信息包传输。
HTTP由两类元素组成:从浏览器到服务器的请求集合和从反方向来的应答集合。
HTTP支持两种请求:简单请求和完全请求。

热点内容
iptables限制ip访问 发布:2025-01-17 21:38:01 浏览:174
易拉罐压缩机 发布:2025-01-17 21:25:35 浏览:924
在c语言是什么意思啊 发布:2025-01-17 21:21:02 浏览:516
re0脚本 发布:2025-01-17 21:13:34 浏览:305
甜蜜家园密码箱有什么用 发布:2025-01-17 21:07:28 浏览:48
有教少儿编程 发布:2025-01-17 20:55:37 浏览:37
直播背脚本 发布:2025-01-17 20:50:18 浏览:410
ftp移动文件的mv命令 发布:2025-01-17 20:45:53 浏览:405
电脑上啥是服务器 发布:2025-01-17 20:40:48 浏览:353
安卓手机怎么连大众车载 发布:2025-01-17 20:20:53 浏览:241