深度包检测(DPI)的记录

2023-11-17

20210301 -

0. 引言

大概一年半之前,让学生整理过关于DPI的内容,当时让他部署过nDPI的DPDK版本;当时给我的DPI的材料也没仔细看,这里直接贴到这里来。
(材料中的内容应该也是从别的地方复制粘贴的,基本上就是一些显而易见的材料)

1. DPI

1.1 DPI是什么

DPI(deep packet inspection)全称深度数据包检测,是一种计算机网络数据包过滤技术,用来检查通过检测点之数据包的数据部分(亦可能包含其标头),以搜索不匹配规范之协议、病毒、垃圾邮件、入侵,或以预定之准则来决定数据包是否可通过或需被路由至其他不同目的地,亦或是为了收集统计数据之目的。在传统数据包检测技术(OSI L2-L4之间包含的数据包元素的检测分析)之上增加了对应用层数据的应用协议识别,数据包内容检测与深度解码。

1.2 DPI的功能

深度数据包检测可以检查消息的内容并识别它来自的特定应用程序或服务。此外,可以对过滤器进行编程,以查找和重新路由来自特定Internet协议(IP)地址范围或某些在线服务(如Facebook)的网络流量。DPI可用于作为网络安全工具可以用于检测和拦截病毒和其他形式的恶意流量。但它也可以用于如窃听等活动。深度数据包检测也可用于网络管理,以简化网络流量的流量。例如,标记为高优先级的消息可以在不太重要或低优先级的消息或在休闲互联网浏览中涉及的数据包之前路由到其目的地。DPI还可用于限制数据传输,以防止点对点滥用,从而提高网络性能。常用功能包括以下内容:
(1)通过对流量的识别来掌握网络中承载的数据内容。
(2)分析出用户的网络行为;
(3)同时根据链路状态及功能需求,对网络流量进行限速和控制等处理
(4)通过特征匹配技术,将数据包在封装过程中所添加的各层头部信息解析并提取,然后与已有规则库中特征信息进行匹配,从而进行流量的识别。

在这里多说两句,实际上虽然这里对DPI进行了这些功能的介绍,但是以我的经验来看,平时的时候可能默认了这个功能的存在,因为经常从事流量相关的任务,那么比较简单的方法来识别协议,那就是通过字符串匹配,虽然现在很多人强调机器学习或者深度学习的方法,但是对于普通的未加密的流量来说,通过DPI的方法,无疑是最简单而且最直观的,因为通过这种方法可以让人不用从统计学的模糊角度上,去体会这个流量可能属于什么类别,而是直接用最简单字符串作为证据。当然,利用字符串匹配方法的时候,还要考虑模板的完备性和排他性来决定判定协议或者判定应用的准确度。

2. DPI使用的算法

其实这部分内容本来是想让学生去找一些DPI都是使用哪些开源的模式匹配或者字符串匹配的算法,但是他也没怎么找到。关于这部分,我知道两个内容以前了解过或者用过的,一个是hyperscan,另一个是ac自动机,本质上他们都是字符串匹配库,或者说正则表达式的库。

而对于流量处理的过程中,如果是性能要求比较高的场景,比如流量出口,那么采用的编程的语言大多都是C语言,虽然有些地方也会使用C++,但据我了解比较少。也是就是说,对于这部分而言,使用的库就是基于C语言的正则表达式库,如果这个库能够在流量处理方面增加一些专长,或者说提供一些基于流浪上的优势,那么这个库就再好不过,hyperscan就是其中一个。

2.1 l7-filter

l7-filter的基本思想使用连接的应用层数据的正则表达式匹配来确定正在使用的协议。在每个数据包上运行正则表达式匹配器是没有意义的。这不仅会浪费大量的时钟周期,而且对于匹配大多数数据包也没用,这些数据包可能包含某些文件的中间部分或诸如此类的内容。相反,l7-filter只查看“hello”消息的连接的前几个数据包,例如“ 220 ftp server ready ”,“ *ok ”或“ HTTP / 1.1 200 ok ”。
l7-filter不是让用户在命令行上提供正则表达式,而是提供一组模式定义文件。为了匹配协议“foo”,用户键入“ iptables … -m layer7 --l7proto foo”,iptables读取定义“foo”的正则表达式/etc/l7-protocols/foo.pat。

注:以上内容没有经过具体测试,仅仅是学生搜集的材料。

3. DPI的开源框架

3.1 nDPI

nDPI(OpenDPI的一分支)是用来检测非模糊协议的开源版本。PACE则包含了模糊与加密协议,与Skype或加密BitTorrent所使用的协议相关。OpenDPI已不再维护,取而代之的是nDPI,现仍积极维护与扩展包含Skype、Webex、Citrix与其他软件在内的新协议。
支持协议详见:https://www.ntop.org/products/deep-packet-inspection/ndpi/

3.2 L7-filter

L7-Filter是用于Linux的Netfilter识别应用层之数据包的分类器。L7-Filter可分类Kazza、HTTP、Jabber、Citrix、BitTorrent、FTP、Gnucleus、eDonkey2000与其他软件。L7-Filter亦可分类流、电子邮件、P2P、网络电话、协议及游戏等应用。
支持协议见http://l7-filter.sourceforge.net/protocols

L7-filter的思路就是使用正则表达式来匹配应用层的数据来判断报文使用的是什么协议。L7-filter并不是把全部包都解析一次,而是通过分析关键的包,解析payload或者连接信息来判断应用类别:L7-filter基于数据流工作,对于一个应用,可能会有多个数据流,但L7-filter并不针对所有数据包进行匹配,只选一个流的前面几个数据包,如果没有识别出任何特征信息,则此数据流无法被识别,停止匹配。
L7-filter提供了内核和用户空间的两种实现,但是似乎基于内核的比较被重视,因为用户空间的版本效率很低(由于做匹配消耗计算资源)。

3.3 Hippie

Hippie(高性能协议识别引擎)是一项开源项目,被开发作为Linux的核心模块。Hippie为Josh Ballard所开发。Hippie支持深度数据包检测与防火墙功能。

3.4 SPID

SPID(统计协议识别)项目透过识别应用程序的讯务,进行网络流量的统计分析。SPID算法可透过分析pcap档的流量(数据包大小等)与负载统计(比特值等),检测应用层协议(第7层)。SPID只是个概念验证程序,当前支持大约15个应用及协议,如eDonkey混淆讯务、Skype的UDP与TCP、BitTorrent、IMAP、IRC、MSN等。

3.5 Tstat

Tstat(TCP统计与分析工具)提供流量图像的概观,并给出许多应用与协议的细节与统计。

3.6 Libprotoident

Libprotoident引入轻度数据包检测(LPI),只检查每个方向之负载的头4个字节。这可减轻对隐私的疑虑,降低为分类而需存储数据包纪录的硬盘空间。Libprotoident支持200个不同的协议,且其分类使用负载模式匹配、负载大小、端口号与IP匹配等混合而成的方法。
支持协议见https://wand.net.nz/trac/libprotoident/wiki/SupportedProtocols
这个库是由新西兰怀卡托大学网络研究组(WAND)开发的一个DPI库,这个研究组有不少成果,主页:http://research.wand.net.nz/
这个库有个最大的特点就是仅使用4bytes的payload数据就能进行流量分类,节省储存空间之余还在一定程度上降低DPI技术对个人隐私的侵害。使用libprotoident时,需要先通过抓包工具收集数据,并确认数据包的方向:因为在网络应用的双向交互中,会产生向不同方向的流量,这个需要用户程序进行判断,判断一个每个包的方向才能交给libprotoident。
使用libprotoident前要求监控程序在双向流开始时就要初始化一个LPI数据结构并由始至终地监测到双向流的结束。
一个用户、一个服务器,两者之间运行着一个监控程序。用户浏览一个页面,此时浏览器发送第一个请求数据,从监控程序监测到请求数据的时候就创建一个lpi_data_t structure,并一直保持监控服务器和浏览器的交互过程,直到最后交互结束。
LPI数据储存着libprotoident用来判断应用协议种类的所需的双向流的信息,包含以下信息:
1.每个方向的payload的前4个字节的数据
2.每个方向的首个承载payload数据的包大小,忽略TCP/UPD/IP头
3.传输协议
4.使用的端口号
5.流所使用的IPv4地址
6.每个方向的首个承载payload数据的包的TCP序列号
7.每个方向的payload总数,最多去到32KB

为了保证重新排序TCP片段,因而需要TCP序列号和总载荷libprotoident只关心首个承载了数据的包,直接忽略其他的包。
libprotoident使用0和1来作为方向的值,一个方向定义为0,那么另一个方向肯定为1,至于具体是什么节点到什么节点、究竟是客户端到server还是server到客户端都不重要。
当方向都定义好,LPI数据也准备好,就可以传给libprotoident进行处理。
libprotoident需要先把一个包、该包所属的流的LPI数据和包的方向传给lpi_update_data函数,然后该函数会从包抽取必要的信息存进LPI数据。
最后,lpi_guess_protocol函数读取该双向流的LPI数据,以判断双向流中使用了何种应用层协议。
libprotoident使用匹配的方式来进行判断,在libprotoident中,针对每个协议都有一个模块。在判断协议时,首先使用所有协议模块对LPI数据进行匹配,直到匹配成功。
而每个模块都可能会使用以下几项规则来进行匹配:
1.payload字段匹配:比如BT协议,如果在payload中出现’B’,‘i’,'t’这样的字段就判断为BT协议。
2.payload大小:网络应用的某些数据包的大小可以用来用来进行判断,因为这些包是关键而且大小几乎是固定的,比如一些P2P应用进行初始化的包。
3.端口号:端口号就不多介绍了,这是很基本的匹配规则,对于使用固定端口的应用来说几乎很少会误判。
4.IP地址:这个规则比较少用,但有必要保留。
关于libprotoident现状:
该项目还在持续开发,最新的版本于今年4月释出,目前支持的协议已经达到300种以上。
(上述文字未考证具体时间)

4. 检测引擎的设计

检测引擎自身包括三个部件:协议解析器、算法引擎和检测结果处理,下面主要对其关键部分的协议解析器进行说明。现阶段额度协议解析器的职责主要有:
1)协议确认: 进入HTTP、HTTPS等协议解析器的条件都是固定端口映射。但越来越多的互联网应用正试图通过80、443等传统端口来逃逸传统网络设备的检测和控制。因此必要的协议确认是防止这种逃逸的前提。
2)协议切分: 协议切分是在流(会话)的基础上进一步细分出“检测流”或者叫“事物”的概念。例如:HTTP的一次transaction、FTP的一次用户登录行为、SMTP/POP3的一次邮件发送/接收等,都抽象成一条“检测流”。有时一条流可以传输多次检测流,甚至同时有并发的检测流出现。协议切分对于关心检测流的业务模块有着重要意义,例如内容过滤和应用审计。
3)协议域切分:协议域切分是在最小的粒度上细分报文。将检测流分成Header和Body部分,Header还要细分成各个Field,包含Field Value和Field Data部分。协议域切分有助于判别该头域是否需要检测,判定该头域命中的特征与之定义是否吻合,以及识别提取审计日志信息的关键位置。
4)解码: HTTP的URI部分和邮件协议的Subject部分等进行了编码,需要协议解析器进行解码,大多数情况下需要我们将解码后的字段送入算法引擎。有些情况又有个别特征基于编码前定义,需要我们将原始字段送入算法引擎,但同时发生会对性能产生一定损耗。
5)解压缩:HTTP可以用gzip、x-gzip、deflate等方式传送压缩后的数据内容,在用户的配置要求下解析器会将内容解压缩后送入算法引擎,以帮助我们发现压缩数据中的需要被检测出的特征。
6)SSL卸载:在用户的配置要求下,可以通过SSL卸载技术尽可能还原HTTPS中的原始流量,进行更加全面的检测和控制。
7)协商协议识别:FTP、SIP以及很多加密方式的P2P协议都采用协商甚至多次协商的方式来进行数据传输。对应的协议解析器需要能够通过控制通道报文的解析识别出协商协议的数据通道的五元组特征,通过协商关联表的匹配来识别其数据通道。
基于这些协议分析完成之后,通过算法引擎可以匹配查找可以发现相关的检测结果,同时送到后续的动作设计模块进行处理。在内核态,DPI支持大量的动作以及它们的组合,各个DPI的业务模块都可以基于规则或者规则分类来配置报文的动作。这些动作包括Permit/deny、Drop丢掉后续报文、Redirect或者发送双向TCP Reset断开连接、生成攻击日志告警等。
8)特征库的设计模型
在进行DPI特征库的设计时,一般都是采用统一的文件头结构和开放式TLV架构,易于软件统一处理和后续业务扩展。同时考虑到不同产品对存储空间、转发性能、并发规格的不同要求,为不同的产品(不限于NGFW)量身定制了不同的特征库。并且,为了能够快速完成升级,在服务器上放置了邻近旧版本的增量库(补丁包)。

5. 关于DPI的总结

5.1 DPI的实现过程

目前来说,虽然对DPI的概念有所了解,也知道大概的技术手段,但对于他具体的代码架构,或者说实现机制,还是不太了解,这个部分需要通过代码或者说其他的材料来进行深入理解。

因为虽然本质上就是一个字符串匹配的问题,但是对于处理流量的过程中,到底是什么匹配还是需要考究,比如说, 仅仅是为了单包检测,那么直接在IP层的数据包每个都进行匹配即可,如果是为了能够更好的减少资源效果,那么可以在TCP的流层面进行检测,例如我知道SNI必然出现在ssl握手的clienthello中,这些属于如何检测的过程。

另外,就是如果进行匹配,匹配过程中,规则引擎如何配置,也是一个问题。

往更深层次来说,例如IDS层面,在完成响应的匹配之后,还需要进行相关的处置手段,例如封堵,丢包等。

甚至于,为了能够更好的进行管理,还需要设计一定的规则管理库,甚至要有前端的功能,这部分就应该属于比较靠后的考虑内容了。

所以,如果是能够在开源的产品中,直接进行移植,而且能够满足实际的需求,那就是最好的。或者说,对于流量处理的部分我自己来处理,而实际进行匹配的部分,直接采用他们的代码,能够更好的实现匹配效率以及管理手段。

5.2 DPI的使用

前面也提到,在我的认知中,DPI已经属于了一种非常常用的功能,这种手段通过简单的规则就能识别出比较常见的协议。实际上,我个人认为,对于DPI中关键的部分,可能匹配手段已经不是最关键的问题了,而是说规则库方面,如何自动化进行规则库的挖掘,比如拥有了大量的某应用包,怎么提取出响应的字符串或者说指纹,这个问题很关键,当然如果不考虑效率的话,一般来说也有很多算法,频繁项挖掘这种,只需要将自己的数据进行响应的预处理,满足算法需求即可。
同时以及底层的应用角度,现在越来越多的厂商在强调云安全,之前的时候我也关注过,例如在云中的东西向流量,但是其实,这里比较关键的问题,就是他们是如何比较高效的捕获流量,这通常也跟底层的虚拟化设备相关,例如采用了OVS这种。这一块的内容就有点脱离了DPI的范畴了。

那么前面提到了两个问题,在实际应用中:
1)规则库的自动化提取
2)底层包捕获引擎。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度包检测(DPI)的记录 的相关文章

  • DPI(dots per inch) PPI(pixel per inch) 求一张图片在某分辨率下的实际尺寸?求计算机显示器PPI? MFC按600dpi时的实际物理尺寸打印图片

    标准固定 1 寸 61 3 3333333 厘米 1 英寸 61 2 54 厘米 求计算机显示器PPI 比如对角线14英寸 xff0c 不是寸 xff0c 即2 54 14 61 35 56cm 按16 9算出宽和高 高 9x 2 43 宽
  • dpi和ppi换算_DPI和PPI的计算公式

    关于DPI和PPI的问题 xff0c 我们之前发布了一篇文章 右侧 但是仍然有小伙伴表示不好理解 其实 xff0c 如果你是数学脑 xff0c 则可以用数学化的方法来理解 请看以下计算过程 xff1a 原图 我们的原图是一份长宽都是1800
  • c++ gdi修改dpi_SV DPI-C接口学习心得

    1 是什么 xff1f xff1f DPI Direct Programming Interface xff0c 全称直接编程接口 xff0c 是SV与其它语言 C C 43 43 交互的接口 xff0c 基本上是唯一接口了 2 为什么 x
  • matplotlib 设置图形大小时 figsize 与 dpi 的关系

    matplotlib 中设置图形大小的语句如下 xff1a fig 61 plt figure figsize 61 a b dpi 61 dpi 其中 xff1a figsize 设置图形的大小 xff0c a 为图形的宽 xff0c b
  • ICMP协议

    参考链接 https www cnblogs com embedded linux p 7068130 html 1 一个新搭建好的网络 往往需要先进行一个简单的测试 来验证网络是否畅通 但是IP协议并不提供可靠传输 如果丢包了 IP协议并
  • Android中的DPI和PPI

    DPI是Android开发中的像素密度 PPI是Android手机物理像素密度 他们两者是完全没有关系的 千万不要把ppi的公式等同于dpi dpi是通过displayMetrics获取的 val densityDpi resources
  • SSL协议

    参考链接 https blog csdn net qq 38265137 article details 90112705 1 HTTP SSL HTTPS 非对称加密计算量很大 效率不如对称加密 我们打开网页最注重的是啥 是速度这点SSL
  • SSL 协议分析:ClientHello 过程分析

    最近在分析某个PC端程序的登录过程 发现它用的是openssl进行https通讯的 由于以前没有openssl的使用经验 遂开始学习这个库 在这里记录一些TLS协议的原理 以及openssl实现TLS协议的代码分析 TLS 相当于 SSL
  • RDP远程桌面协议

    1 概况 目前常用的远程桌面协议有VNC SPICE RDP三种 2 RDP Remote Desktop Protocol 远程桌面协议 是一个多通道 multi channel 的协议 让用户 客户端或称 本地电脑 连上提供微软终端机服
  • tcpreplay-tcprewrite

    1 介绍 参考链接 https www cnblogs com zlslch p 7325599 html utm source itdadao utm medium referral tcpreplay是一种pcap包的重放工具 它可以将
  • 关闭或者半关闭?!

    2017 05 20 LIBnids这个库 对于关闭的两个状态 理解的不是很清楚 就是 CLOSE算一个状态 CLOSE之前并不调用EXITING的语句 这就很尴尬 目前就当这两个是同一个状态 但是看着有些数据包是关闭的 结果显示不关闭 这
  • 以高于屏幕分辨率的 dpi 打印表单

    Problem 我们需要有关如何使用 WinForms 自动缩放到不同 DPI 的功能的帮助 以便我们能够以 600 dpi 而不是屏幕 DPI 打印表单 对于 所见即所得 打印 我们只是简单地使用布局精美的窗口并打印它 关闭滚动条和按钮等
  • 创建 DPI 感知应用程序

    我有一个 C 表单应用程序 当我更改显示器的 DPI 时 所有控件都会移动 我用了代码this AutoScaleMode AutoScaleMode Dpi 但这并没有回避问题 有人有想法吗 编辑 从 NET 4 7 开始 Windows
  • BitmapSource.Create() 方法中 DPI 的相关性是什么?

    我读了维基百科的文章DPI http en wikipedia org wiki Dots per inch 但这让我更加困惑 我没有图像上的任何 DPI 信息 我应该使用什么 DPIBitmapSource Create http msd
  • 如何为新的 JPG 图像定义 DPi?

    我将使用 PHP 创建一个新的 JPG 图像 如何设置新 JPG 图像的 DBi 值 Dirk JPG 是一种像素格式 它并不真正了解每英寸点数等物理尺寸 你所能做的就是写一个dpi值到文件的元数据中作为进一步处理的帮助 但这只是一个建议
  • 如何绘制独立于 DPI 的 GDI + 文本

    我正在使用 GDI 绘制文本 我最近注意到 当 DPI 更改时 该文本会自动缩放 有没有办法让GDI 文本绘制独立于DPI 例如 我想绘制最大 20 像素的文本 无论 DPI 是多少 是否可以 这个怎么做 下面是示例代码 我想以恒定的大小绘
  • 我可以在不更改系统 DPI 设置的情况下设置 Java Swing 应用程序的 DPI 分辨率吗?

    我有一个使用 Substance LookAndFeel 并以 Windows 作为目标平台的 Java 应用程序 我想增加应用程序的 DPI 设置without更改系统设置 我想这样做是因为我不想强迫用户重新启动 Windows 而且许多
  • PDF 文档可以包含不同 DPI 的图像吗?

    这个问题说明了一切 是否有包含不同 dpi 每英寸点数 图像的 PDF 文档 或者是否假设如果我知道一张图像的 dpi 我就知道整个文档的 dpi 我赞成 ypnos的回答 这是完全正确的 但我想通过展示一个最近的新功能来补充它pdfima
  • 保存 PDF 时的 matplotlib 线宽

    我有一个具有一些对线宽敏感的相当微妙的特征的图形 我想将此图保存为可以轻松打印的 PDF 即接收器端无需缩放 只需 Command P 即可 不幸的是 当我设置 Figsize 8 5 11 以便正确调整 PDF 的打印大小时 matplo
  • 如何将 WPF 大小转换为物理像素?

    将 WPF 与分辨率无关 宽度和高度转换为物理屏幕像素的最佳方法是什么 我正在 WinForms 表单中显示 WPF 内容 通过 ElementHost 并尝试制定一些大小调整逻辑 当操作系统以默认 96 dpi 运行时 我可以正常工作 但

随机推荐

  • K8s微服务从0到1入门及命令实战

    写在前面 本文主要介绍k8s的核心概念 基础语法 常用命令和常用操作 Kubernetes介绍 Kubernetes是一种流行的开源容器编排和管理系统 它的目标是简化部署 扩展和管理容器化应用程序 Kubernetes最初由Google开发
  • 如何让女人满意?多个心眼爱女人

    别以为只有男人甜言蜜语地哄骗女人 女人有时也会设下甜蜜的陷阱让男人钻 如果有一天 你那个素来刁蛮的小女人突然变得乖巧柔顺 温温柔柔地抱着你的胳膊说 亲爱的 我今天心情特别好 给你一分钟的时间诉诉苦苦吧 平时我有哪些缺点令你敢怒不敢言的 尽管
  • python学习笔记第一天

    一 Python的基本语法元素 Python程序从默认的第一条语句开始 按顺序依次执行各条语句 代码块可视为复合语句 Python使用严格的缩进 空格 来表示代码块 连续的多条具有相同缩进量的语句为一个代码块 注释用于为程序添加说明性的文字
  • Deep learning Reading List

    Following is a growing list of some of the materials i found on the web for Deep Learning beginners Free Online Books De
  • 简单HTML+css太极图

  • Tauri 应用中发送 http 请求

    最近基于 Tauri 和 React 开发一个用于 http https 接口测试的工具 Get Tools 其中使用了 tauri 提供的 fetch API 在开发调试过程中遇到了一些权限和参数问题 在此记录下来 权限配置 在 taur
  • vue中的input输入框按回车键自动搜索

    vue中的input输入框按回车键自动搜索 在input标签内部增加 keyup enter事件即可 事件名为按钮点击名称
  • python之文件夹拷贝(亲测可用)

    效果 import os import shutil def copy dir src path dst path source path os path abspath src path target path os path abspa
  • centos7 mysql 机器重启后pid文件丢失导致mysql 服务无法重启

    1 首先执行命令vim etc my cnf 查看pid存储的路径 pid file xxxxxx 2 到对应的路径下查看发现已经丢失了 mysqld pid创建在系统的run目录下 该目录是运行在内存中的 因此服务器重启后文件不存在 3
  • CentOS 7 下 minikube 部署 && 配置

    CentOS 7 下 minikube 部署 配置 文章目录 CentOS 7 下 minikube 部署 配置 下载 安装 下载安装脚本 安装 minikube 启动 minikube 环境 安装 kubectl 工具 启动 miniku
  • 在Caffe中调用TensorRT提供的MNIST model

    在TensorRT 2 1 2中提供了MNIST的model 这里拿来用Caffe的代码调用实现 原始的mnist mean binaryproto文件调整为了纯二进制文件mnist tensorrt mean binary 测试结果与使用
  • 【Git】git push origin master时发生的各类错误汇总

    文章目录 一 常见的git命令 二 错误一 三 错误二 四 错误三 五 问题解决 一 常见的git命令 使用 git 命令时 您可以执行一系列操作来管理代码仓库 下面是一些常用的 git 命令及其功能 git init 在当前目录初始化一个
  • 【计算机网络】网络层:网际控制报文协议ICMP

    ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告 不是高层协议 是IP层的协议 分为差错报告报文和查询报文两类 ICMP报文作为IP层数据报的数据 加上数据报的首部 组成IP数据报发送出去 ICMP报文直接封装在以太帧 数据链路
  • apache commons-io read-file

    文章目录 依赖
  • asp.net google地图+百度地图绘制行政区域图

    直接贴代码
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法

    简介 相信阿里云服务器ECS已被广大的企业和个人站长所使用 但对于之前没有使用过阿里云服务器的新手小白来说 无疑是一头雾水 今天呢 服务器吧小编就给刚接触阿里云ECS的新手小白带来快速入门阿里云服务器的方法 相信阿里云服务器ECS已被广大的
  • MySQL8新增管理端口

    简介 用过MySQL数据库朋友一定对 ERROR 1040 HY000 Too many connections 这个报错不陌生 出现这个报错的原因有两种情况 一种是单个用户的连接数超过 max user connections 参数定义值
  • 【考研复习】24王道数据结构课后习题代码|2.3线性表的链式表示

    文章目录 总结 01 递归删除结点 02 删除结点 03 反向输出 04 删除最小值 05 逆置 06 链表递增排序 07 删除区间值 08 找公共结点 09 增序输出链表 10 拆分链表 尾插 11 拆分链表 头插 12 删除相同元素 1
  • Python 生成随机的六位数

    首先给出代码 然后再分析代码中函数的意思 1 生成随机的六位数 import random str for i in range 6 ch chr random randrange ord 0 ord 9 1 str ch print st
  • 深度包检测(DPI)的记录

    20210301 0 引言 大概一年半之前 让学生整理过关于DPI的内容 当时让他部署过nDPI的DPDK版本 当时给我的DPI的材料也没仔细看 这里直接贴到这里来 材料中的内容应该也是从别的地方复制粘贴的 基本上就是一些显而易见的材料 1