从套接字到WebSockets:代码,PCAPS和有效载荷

2021-06-08 00:19:39

该目录包含一些实验代码,允许我们看到基于TCP套接字的应用程序,简单的HTTP Web应用程序,基于WebSocke的应用程序以及在ActionAnd中的WebSocke的应用程序,研究了客户端和服务器交换的基础应用程序层有效负载虽然每个应用程序正在运行。此处的所有代码在其自然中最小。没有使用加密。有很少的误差处理。这里的目的仅限于与各种编程产生的应用层有效载荷进行比较。

只要只看到每个示例应用程序的有效载荷看起来就像,转到有效载荷部分。要运行Onyour系统的示例程序,请继续使用下一节读取。

该目录中的程序实现了非常简单而最小的程序程序,可将服务器发送到客户端的当前时间。 Chesame功能以四种不同的方式实现:TCP套接字,纯Web应用程序,基于AJAX的Web应用程序,基于WebSocket的Web应用程序。下面的清单以一般方式谈论这些方法。

TCP套接字:服务器程序在TCP端口上侦听。客户程序程序编程连接到它。一旦连接成立,一方就可以向彼此发送消息。在1980年代,TCPSockets开发网络应用的使用。 TCP在服务器和客户端之间提供全双工,面向导向的连接频道,用于在服务器和客户端之间进行数据流。 1983年,伯伯基州套接字API创建了4.2BSD UNIX以创建和工作套接字。它很快就成为了使用与袜子一起使用的事实标准。 POSIX以及Windows套接字API基于它。

动态Web应用程序:通过Web服务器提供服务器应用程序。服务器应用程序提供可动态生成的网页,可以使用Web浏览器查看。这种方法在20世纪90年代初,随着万维网玫瑰的入侵。 PHP,CGI,ASP等的技术在早期使用TOSERVE Dynamic网页。现在,几乎每个主要编程Languageo都有许多主要的惯性工作创建和提供动态网页。如果需要更新页面中的任何组件,则必须刷新整个页面。动态内容被分开到加载在< iframe&gt中的小页面中的微小页面。较大的网页中的元素,Sothat更新动态内容涉及仅重新加载< iframe&gt内的锡型。元素,不是一个且< iframe&gt中的整个较大的较大页面。元素可以每隔几秒钟或分钟自动设计转矩。 < iframe>元素首先由Microsoft In1996中的Internet Explorer引入。

基于Ajax的Web应用程序:服务器在其中嵌入到客户端的JavaScript代码的网页提供服务。当需要更新页面中的某些DynamicContent时,JavaScript代码运行Web浏览器并将所谓的异步JavaScript和服务器发送到所谓的异步JavaScript和XML(也写入Ajax)请求。 Anajax请求实际上是HTTP请求,但它被称为所以由于可以在加载页面后异步调用它而无需重新加载整个网页。在服务器响应所请求的数据后,JavaScript CodeUpdates网页' s文档对象模型(DOM)以在Web浏览器上显示扫描数据。此方法避免重新加载整个网页以显示更新的动态数据。当Microsoft使用它在Outlook Web Access中使用它时,此方法在2000年代早期流行。 XML在早期是Populardata Interchange格式,但现在JSON哈斯曾在普及中哈索。

基于WebSocket的Web应用程序:服务器在其中嵌入到客户端的JavaScript代码中提供网页。 Web浏览器上的JavaScript CodeExecutes并向TheServer进行HTTP请求。该请求包含HTTP标头(连接:升级,升级:Websocket等),以请求Web服务器将通信协议升级到WebSocket。 WebSocket协议ISA双向,可旨在overhttp的状态协议。在Web服务器同意升级协议上的BodeBsocket后,服务器或客户端可以通过WebSocket发送要发送的消息,而无需创建Newfull吹HTTP请求。这种方法在2010年代变得流行,特别是实现需要频繁更新的聊天应用程序和其他应用程序。这避免了客户端定期轮询服务器,就像Theaax方法中常见一样。 2009年12月,Google Chrome 4是FirstBrowser全力支持WebSockets。现在它是可用性的大多数主要浏览器中的标准功能。

请注意,此文档与套接字ally.socket.io并不关心一个javascript库,它是支持Web客户端和Server之间的实时,双向,事件的基于事件的通信。 Socket.io在内部使用WebSocket,但它也支持返回HTTP长轮询(一种流行的Ajax-PResITICACES的方法)如果在Web Client中找不到WebSocket的支持。此文档仅与WebSocket IONT,而不是Socket.io。

此部分和下一个介绍如何设置虚拟PythonEn环境并运行此目录中可用的示例程序。跳过运行程序,然后读取关于PacketCaptures和应用程序层有效载荷,直接转到Proced Packet捕获或部分有效载荷。

执行以下步骤以设置虚拟Python环境托伦示例程序:

实验环境取决于这些工具:Git,Python 3,Netcat,现代Web浏览器。在最近版本的Macos(例如,MacOS Catalina 10.15)中,这些工具可通过Default获得。如果您的系统上缺少这些工具,或者如果您最近的这些工具的版本,您可以使用此命令安装主题Homebrew:

请注意,Debianto Build Gevent需要Python3-Dev,GCC和Make,以便能够在此目录中运行大多数示例程序。

执行Sanity检查以确保您的虚拟Python环境设置。首先运行运行基于SimpleWbsocket的时间服务的程序:

然后访问http:// localhost:8000 / with web浏览器。应该出现当前时间的Web页面。然后点击" refreshvia websocket"几秒钟后按钮。更新时间应该申请。

从此处开启,随时您想要运行一个示例程序可用的Inthis目录,您必须运行它的虚拟Python环境设置为Ummust。 shellPrompt开头的字符串(WebSockets)显示您处于虚拟Python环境中。在案例中为任何原因丢失了虚拟Python环境。 〜/ .venv / websockets / bin / spectate再次激活它。

执行以下步骤以运行简单的TCP套接字App Tcpapp.py并与之交互:

然后运行netcat以连接到应用程序并获取服务器上的时间时间:

键入netcat中的时间,然后按ENTER获取THETHERE时间。以下是具有serverProgram的示例NetCat会话:

请注意,如果多个客户端连接到TCP服务器程序,则服务器接受并处理顺序的连接。这已经完成,以便使程序极其严格,因为这里的焦点是在检查数据包数据时,不开发强大的服务器程序。

请注意,典型的Web应用程序可以每隔几秒钟或分钟自动自动自动自动浏览Web浏览器上的更新数据,从用户没有重新查询手动操作。在示例程序提供的情况下,用户需要手动单击按钮以重新加载页面。此处提供的示例的NONE更新动态ContentAutomAlic,因此我们可以在WENED时手动刷新内容。这使我们可以手动控制有效载荷的生成,我们可以使用数据包捕获工具方便地观察它们。

PCAPDirectory中提供每个示例程序的数据包捕获。每个数据包捕获(PCAP)的时间轴大致如此:

每个示例程序都在Linode虚拟机RuningDebian GNU / Linux 10.9(Buster)上运行。通过在Debian系统上运行Flowing命令来获得PCAP:

对于TCP套接字应用程序,Netcat 46.40.1用于从麦斯卡尔纳群岛连接到IT 10.15.7。对于其他Web应用程序,Firefox 89.0被人用来从同一MacOS系统连接到它们。

这些PCAP可以使用理解PCAPFormat的软件工具读取。一些用于读取PCAPS的流行工具是Wireshark,Tshark,TCPdump等。PCAP目录中的TXT文件包含了空间可读数据包数据,从PCAPfiles自动解析出来。

下表显示了客户端的单个服务器时更新的统计信息,即,此表显示了客户端发送的ASINGE请求的统计信息和收到的响应。

有关表列标题的含义的更多详细信息,请参阅“文档”部分。显而易见的是,基于WebSocket的方法(表中的第4行)在网络带宽范围内比动态Web应用程序或基于Ajax的Web应用程序更有效。这是sobecaue websockets具有非常小的标题数据。虽然HTTP Payloadmay具有几百个HTTP标头,但WebSocket有效载荷散列了几个字节的标题数据。

请注意,帧字节= 34 *总数据包+ TCP字节+ App字节。此公式中的数字34是以太网的长度和在ThePCAP中发现的每个分组中的IPv4报头的长度的总和,即34 = 14 + 20。

本节的小节将从PCAP目录中的PCAP文件中介绍了应用层有效表达。在“阅读”部分之后,请在从PCAP文件中解析出来的MoreData中的PCAP目录中的文本文件。

Warning: Can only detect less than 5000 characters

上面的输出中的最后两行显示了WebSocket的有效载荷数据交换。 显示不可打印的字符 ......