/*
* blackboy   psyc209@163.com
* QQ群: 135202158
* 转载请注明作者及出处

*/ 


声明: 本书版权归原作者与出版社所有,本人对其进行翻译、标注、扩充或修改只为学习和研究目的,不会用于商业目的。


// 2013.1.23

进行有效数据分析的一个关键决定是,在何处放置数据包解析器来捕获数据。数据分分析师一般称之为“嗅探线路[sniffing the wire]”、“监听网络[tapping the network]”,或者“监听线路[tapping into the wire]”。简单地说,它就是在网络上正确的物理位置放置数据包嗅探器的方法。

然而,监听数据包并不是把电脑连接到网络并捕获流量那么简单。事实上,有时候把数据包嗅探器放置到网络线路系统内,比实际分析数据包还要难。

放置嗅探器的挑战是大量不同的网络硬件被用于连接设备。Figure 2-1展示了典型的情况。因为现代网络中的三种主要设备(集线器、交换机和路由器)都以不同方式处理流量,你必须十分了解所要分析的网络的物理配置。

本章的目标是帮助你理解在各种不同的网络技术中放置数据包嗅探器。但是首先来看一下,我们怎么样才能看到经过被监听线路的所有数据包。

使用混杂模式

在对网络进行数据包监听之前,你需要一块支持混杂模式驱动的网卡[NIC]。混杂模式[promiscuous mode]允许网卡查看经过线路的所有数据包。

如在第1章所学,由于广播流量,客户端常常接收到实际上不是发给它们的数据包。用于确定与特定IP地址对应的MAC地址的ARP协议,在网络中十分关键,而它也是把流量发送到并非预期的接收者的一个好例子。为了找出匹配的MAC地址,ARP向其广播域中的所有设备发送广播数据包,并希望正确的客户端能有所回应。

广播域(即任意主机都可以不经路由器而直接与其他主机通信的网段)可能由数台主机构成,但仅有一个客户应该对ARP广播数据包感兴趣。对于网络中的主机来说,处理ARP广播数据包是非常没有效率的。不过,网络中作为非发送目标的设备的网卡会知道这些数据包不是发给它们的,并丢弃数据包,而不是将其送到CPU去处理。

上述的数据包丢弃提高了处理效率,但对于数据包分析者来说是个坏消息。做为分析人员,我们一般想看到在线路上所发送的所有数据包,免得错过一些关键的信息片段。

通过使用网卡的混杂模式,可以确保我们捕获到所有的流量。当工作于混杂模式时,网卡会将它所看到的所有数据包发送到主机的处理器,而不理会寻址机制。一旦数据包被发送到CPU,它就将被数据包嗅探程序所抓取以进行分析。

大多数现代网卡支持混杂模式。Wireshark包含libpcap/WinPcap驱动,它允许在Wireshark GUI将你的网卡直接切换到混杂模式。(我们将在第3章更多地讨论libpcap/WinPcap)。

为了使用此书,你必须有一块网卡,以及一个支持使用混杂模式的操作系统。仅当只想看到发送给嗅探接口的流量时,才不需要在混杂模式下嗅探。

注意: 大多数操作系统(包括Windows)不允许在混杂模式下使用网卡,除非你具有提升的用户权限。如果你不能合法地获得这样的系统权限,你可能无法在网络中进行任何形式的数据包嗅探。

在集线器[hub]周围嗅探

在安装了集线器[以下简称hub]的网络中嗅探是每一个数据包分析师的梦想。如在第1章所学,经hub发送的流量会经过Hub所连接的所有端口。因此,要分析连接到hub的主机的流量,你只需将数据包嗅探器连接到hub的空闲端口上。你将看到来那台主机收发的所有通信,以及连接到该hub的其他设备之间的所有通信。如Figure 2-2所示,当嗅探器连接到基于hub的网络时,你的“可视窗口”是无限的。

注意:可视窗口[visibility window],表示网络中你能通过数据包分析看到其流量的设备,本书的多个插图都会用到它。

不幸的是,基于hub的网络非常少见,因为它让网络管理员头疼。因为在同一时刻只能有一台设备进行通信,连接到hub的设备必须与其他设备竞争带宽。当两个或两个以上的设备同时通信时,数据包会发生冲突,如Figure 2-3所示。结果可能是数据包丢失,通信设备将通过重传数据包来弥补此丢失,这就增加了网络拥塞和冲突。当流量和冲突次数增加时,设备可能需要重传某个数据包3到4次,这会严重影响网络性能。这就很容易理解为什么现在大多数网络都使用交换机了。

在交换机环境中嗅探

如第1章所述,交换机是现代网络环境中最普遍使用的连接设备类型。它提供通过广播、多播及单播来传输数据的有效手段。另外,交换机还允许全双工通信,这意味着机器可以同时发送和接收数据。

对于数据包分析师而言不幸的是,交换机将复杂性增加到新的水平。当把嗅探器连接到交换机的端口时,你仅能观察到广播流量和你的机器收发的流量,如Figure 2-4所示。

在交换机网络上的目标设备上捕获流量主要有4种方法:端口镜像, hubbing out,使用tap,以及ARP缓存投毒(ARP cache poisoning)。[网上一个有关ARP cache poisoning的文章:http://820619.blog.51cto.com/157584/36318/]

端口镜像[Port Mirroring]

端口镜像,或者叫port spannng,可能是在交换机网络中的目标设备上捕获流量的最简单方法了。在配置时,你必须拥有目标主机所在交换机的命令行或web管理接口的权限。另外,此交换机必须支持端口镜像,并有一个可以让嗅探器接入的空闲端口。

要完成端口镜像,须发出命令强制交换机把某个端口的所有流量复制到另一端口。例如,要捕获交换机#3端口所连设备的流量,我们可以简单地把分析器接到#4端口,并把#3镜像到#4,这样就会观测到目标设备所收发的所有流量。Figure 2-5展示了端口镜像。

设置端口镜像的方式取决于交换机的制造商。对于大多数交换机,需要登录到命令行接口并输入端口镜像命令。一些常用的端口镜像命令如下表所示:

用于开启端口映射的命令
制造商 命 令
Cisco set span ≪source port> <destination port>
Enterasys set port mirroring create <source port> <destination port >
Nortel port-mirroring mode mirror-port <source port> monitor-port <destination port>

注意: 一些交换机提供基于Web的图形界面,其中提供端口镜像选项,但这并不常见也不标准。然而,如果你的交换机通过图形界面提供了配置端口镜像的有效方式,那就用它吧。

在进行端口镜像时,要注意所镜像的端口的吞吐量[throughput]。一些交换机制造商允许将多个端口镜像到一个端口,这在分析单个交换机上的两个或多个设备之间的通信时是非常有用的。然而,让我们使用简单的数学计算来看一下会发生什么。如果使用一个24交换机,并把23个全双工的100Mbps端口镜像到一个端口,在那个端口上就会有4600Mbps的潜在流量。这已经远远超过[well beyond]单个端口的物理极限,因此若流量达到某个水平时,会导致数据包丢失或者网络变慢。在这种情况下,交换机会完全丢弃多余的数据包,或者甚至暂停其内部电路[circuitry],以保护整体通信[preventing communication altogether]。要确定在进行捕获时不要发生类似这样的情况。

Hubbing Out

在交换机网络中的目标设备上进行流量捕获的另一种方法是使用hubbing out。它是把同一网段上的目标设备和分析器系统分别直接接入到一个hub。很多人认为hubbing out是一种欺骗,但是在无法进行端口镜像、但却仍拥有目标设备被接入的交换机的权限时,它确实是一种完美的解决方案。

要进行hub out,你只需要一个hub和一些网线。有了这些硬件后,按如下步骤连接它们:

  1. 到目标设备所在的交换机上,把目标[机的网线]从网络上拔下来。
  2. 把目标机的网线接入你的Hub。
  3. 把连接分析器的网线接入hub。
  4. 把hub连到交换机,使其接入网络。

现在已经基本上把目标设备和分析器放在了同一个广播域中,所有来自目标设备的流量都将被广播,这样分析器就能够捕获这些数据包,如Figure 2-6所示。

在大多数情况下,hobbing out会把目标设备从全双工减为半双工。虽然这种方法并不是在线路上监听的最clean的方式,但当交换机不支持端口镜像时,它有时却是你的唯一选择。但要记住,你的hub也需要一根电源线,这在一些情况中是很难满足的。

注意: 提醒一下,当你拔掉设备[的网线]时告知其用户是一个好的习惯,尤其当这位用户是公司的CEO时!

找到“真正的”hub

当进行hubbing out时,要确定你所用的是一个真的hub,而不是贴着假标签的交换机。一些网络硬件厂商有个销售的坏习惯,它们把实际上是底层交换机的设备说成是hub。如果没有一个经过测试证明了的hub,你将只能观测到你自己的流量,而不是目标设备的。

当你找到一个hub时,要对它进行测试以确保它确实是一个hub。如果是,它就是一个keeper!检验是否真的hub的最好方式是用它连接[hook up]一对主机,并观察其中一台是否能嗅探到另一台与网络上其他设备(如第3方主机或者打印机)的流量。如果可以的话,那么它就是一台“真正的”hub。

hub是如此地过时,以致于实际上已经不再被大量生产了。在市面上几乎不可能买到真正的hub,因此要找到它得有些创造力。一个大的货源可能是你当地学校的旧货市场,在那里你可能用一碟白豆子或玉米面包的钱就能买到它。eBay也可能是一个好的hub货源,不过同样还是要小心那些被误标成hub的交换机。

使用Tap

人人都知道这个说法:“能吃牛排为什么还要吃鸡肉?[Why have chicken when you can have steak?]”(如果你来自南部,就是“能吃煎香肠为什么还要吃汉堡?[Why have ha m when you can have fried bologna?]”)。这种选择也适用于hubbing out VS 使用tap。

网络tap是一种硬件设备,你可以将其放在线路系统的两端之间,以便捕获这两端之间的数据包。与hubbing out不同的是,你不是用hub,而是用一种为网络分析所设计的特殊硬件。

主要有两种类型的网络tap: aggregated 和 nonaggregated。这两种都位于两个设备之间,用来嗅探通信。二者主要的区别是nonaggregated tap有4个口,如Figure 2-7所示;aggregated tap只有3个口。

tap一般也需要电源,虽然有些也带有电池以供有限嗅探之用。

Aggregated Taps

aggregated tap用起来最简单。它仅有一个物理监听端口用于嗅探双向通信。

要使用aggregated tap来捕获连接到交换机的主机的所有收发流量,遵循以下步骤:

  1. 把主机[的网线]从交换机上拔掉。
  2. 把网线的一端连接到主机,另一端连接到tap的“IN”端口。
  3. 把另一根网线的一端连接到tap的“OUT”端口,另一端连接到网络交换机。
  4. 把第3根网线的一端连接到tap的“Monitor”端口,另一端连接到运行嗅探器的主机。

应如Figure 2-8所示那样连接aggregated tap。此时,你的嗅探器将捕获刚才连接到tap的主机的所有进、出流量。

Nonaggregated Taps

Nonaggregated tap比aggregated tap稍微复杂一些,但它在捕获流量时更为灵活。Nonaggregated tap有两个监听端口。一个监听端口用于嗅探一个方向(从主机到tap)上的流量,另一个监听端口用于嗅探另一个方向(从tap到主机)上的流量。

要捕获连接到交换机的主机的所有收发流量,遵循以下步骤:

  1. 把主机[的网线]从交换机拔掉
  2. 把网线的一端连接到主机,另一端连接到tap的“IN”端口。
  3. 把另一根网线的一端连接到tap的“OUT”端口,另一端连接到网络交换机。
  4. 把第3根网线的一端连接到tap的“Monitor A”端口,另一端连接到运行嗅探器的主机的一块网卡。
  5. 把第4根网线的一端连接到tap的“Monitor B”端口,另一端连接到运行嗅探器的主机的第2块网卡。

应如Figure 2-9所示连接nonaggregated tap。

选择网络Tap

既然两种tap不同,那么哪一个更好呢?在大多数情况下,aggregated tap更好,因为它需要较少的网线,而且不需要你的嗅探器主机有2块网卡。然而,当需要捕获大规模的流量,或者仅关心某一方向上的流量时,使用nonaggregated tap更好。

你可以买到各种级别的tap,从简单的150美元的Ethernet tap,到价值5位数的企业级的光纤tap。我用过Net Optics和Barracuda Networks出的tap,并很喜欢用它们。我确信还有很多其他好用的tap。

ARP Cache Poisoning

我最喜欢的线路监听技术之一是ARP cache poisoning。 我们将在第6章详细介绍ARP协议,但在这里有必要做简单的介绍以便理解这种技术的工作原理。

ARP过程

让我们回忆第1章中提到的,OSI模型的第2和第3层有两种主要的数据包寻址。第2层寻址,或者叫MAC寻址,与你所使用的第3层寻址系统结合使用。本书中,为了与工业标准一致,我把第3层寻址系统称为IP寻址系统。

网络中的所有设备在第3层使用IP地址互相通信。交换机工作在OSI模型的第2层,它们只认识第2层MAC地址,因此设备必须能够在它所构建的数据包中包含这种信息。当MAC地址未知时,必须能够通过已知的第3层IP地址来获取到它(MAC地址),以便能够将流量转发到合适的设备。这个翻译过程是通过第2层协议ARP来完成的。

上一段的原文:All devices on a network communicate with each other on layer 3 using IP addresses. Because switches operate on layer 2 of the OSI model, they are cognizant of only layer 2 MAC addresses, so devices must be able to include this information in packets they construct. When a MAC address is not known, it must be obtained using the known layer 3 IP addresses to be able to forward traffic to the appropriate device. This translation process is done through the layer 2 protocol ARP.

对于Ethernet网来说,当一台主机想要与另一台进行通信时,就会开始ARP过程。发送主机首先检查它的ARP缓存,查看是否已经具有与目标主机IP地址相关联的MAC地址。如果没有,它就向数据链路层广播地址FF:FF:FF:FF:FF:FF发送一个ARP请求。这个广播的数据包被Ethernet网段上的所有主机所接收。此数据包会询问:“如果你是IP地址a.b.c.d的拥有者,请回答你的MAC地址?” 【这里原文可能有误,原文最后一句是:“Which IP address owns the XX:XX:XX:XX:XX:XX MAC address?”,而我认为应是“Which MAC address owns the a.b.c.d IP address?”】

非目标主机IP地址的设备简单地丢弃此ARP请求。目标机器通过通过带有其MAC地址的ARP reply来回复此数据包。此时,原发送方主机就有了与远程主机通信所需的数据链路层寻址信息,并将其存入ARP高速缓存。

ARP Cache Poisoning的工作原理

ARP cache poisoning, 有时叫做ARP欺骗[spoofing],是向Ethernet交换机或路由器发送带有伪造的MAC(第2层)地址的ARP报文,以便截听另一台主机流量的过程。Figure 2-10展示了它的创建。

ARP cache poisoning是在交换机网络上进行线路监听的一种高级形式。它常常被攻击者所使用,来向客户系统发送伪造地址的数据包,以便截听特定流量,或者在目标上进行DoS[denial-of-service]攻击。然而,它也是一种在交换机网络上对目标机进行数据包捕获的合法方式。

使用Cain & Abel

当要尝试ARP cache poisoning时,第一步是获取所需的工具和收集一些信息。这里我们使用oxid.it的著名安全工具Cain & Abel(http://www.oxid.it),它支持Windows系统。根据网站上的提示,下载并安装它。

在使用Cain & Abel之前,你需要收集一些信息,包括分析器系统的IP地址,你想要捕获其流量的远程系统的IP地址,以及远程系统上游路由器[the router from which the remote system is downstream]的IP地址。

当第一次打开Cain & Abel时,你会注意到窗口顶端附近有一系列标签页。(ARP cache poisoning只是Cain & Abel的功能之一。)我们要的是Sniffer标签页。当你点击此标签页时,应该会看到一个空表格,如下图所示。

要完成此表格,你需要激活此程序的内置sniffer并在你的网络上扫描主机。要完成工作,遵循以下步骤:

  1. 点击工具栏的左边第2个图标。
  2. 在这里选择要嗅探的接口。此接口应连接到你所要进行ARP cache poisoning的网络。选择此接口并点击OK(确保此按钮被按下,以便激活Cain & Abel的内置sniffer)
  3. 点击加号(+)图标,创建你所在网络上的可用主机列表。之后出现MAC地址扫描器对话框,如下图所示。“All hosts in my subnet”单选框应被选中(或者你可以根据需要指定地址范围),点击OK继续。

刚才的表格现在应被你所连网络上的所有主机的列表所填充,包括其MAC地址,IP地址,以及生产商信息。此列表可用于配置ARP cache poisoning。

在程序窗口的底部,你会看到一组标签页,它们是Sniffer标题下的其他窗口。既然已经有了主机列表,现在可以进入APR(ARP Posion Routing)标签页。

在APR窗口中,有两个空的表格。在完成配置步骤之后,上面的表格将显示ARP cache poisoning涉及到的设备,下面的表格将显示poisoned机器之间的通信。

要配置poisoning,遵循以下步骤:

  1. 点击屏幕上方[即前面提到的上面的表格]的空白区域,再点击工具栏中的加号(+)图标。
  2. 出现的窗口有两个pane。左边是网络上所有可用主机的列表。点击要嗅探的目标主机的IP地址,右边的pane将显示网络上的所有主机列表,除了目标主机的IP地址。
  3. 在右边的pane,点击目标主机上游的路由器的IP地址,如Figure 2-13所示,然后点击OK。现在主程序窗口上面的表格会列出这两个设备的IP地址。
  4. 击工具栏上黑黄两色的核辐射图标,它将激活Cain & Abel的ARP cache poisoning特性,并允许你的分析系统成为目标系统与其上游路由器之间通信的中间人[middleman]。

你现在可以启动你的数据包嗅探器并开始分析了。当完成流量的捕获时,只需再次点击那个核辐射图标,来停止ARP cache poisoning。

ARP Cache Poisoning注意事项

做为ARP cache poisoning的最后说明,你应该意识到目标系统的角色。例如,当目标设备对网络的利用率很高时 —— 如一个1Gbps带宽的文件服务器(尤其当你的分析器系统仅提供100Mbps带宽时)—— 不要使用此技术。

当你使用例子中所述的技术重新路由流量时,目标系统收发的所有流量都必须先经过你的分析器系统,因此使你的分析器成为通信过程中的瓶颈。这种重新路由会在你的分析机器[the machine your are analyzing]上造成DoS形式的影响,这会导致退化的网络性能和错误的分析数据。

注意: 你可以通过使用一种名为不对称路由[asymmetric routing]的特性来避免所有的流量都经过你的分析系统。关于此技术的更多信息,见oxid.it用户手册(http://www.oxid.it/ca_um/topics/apr.htm)。

在路由器环境中嗅探

所有用于交换机网络的线路监听技术也同样适用于路由器网络。唯一的主要考虑,是当排除跨越多个网段的问题时,嗅探器放置的重要性。

正如你所知,设备的广播域扩展到路由器为止,在那里流量被交给下一个路由器。在数据必须穿越多个路由器的情况下,在路由器的每一边分析流量就很重要。

例如,考虑在由多个路由器连接的多个网段的网络中,你可能会遇到的通信问题。在这个网络中,每个网段与其上游网段通信,以便存储和获取数据。基于Figure 2-14,我们要解决的问题是某个下游子网,网络D,无法与网络A中的设备通信。

当嗅探网络D中设备的流量时,你可能会看到数据被发往其他网段,但没有数据发回来。如果你重新考虑嗅探器的位置,并开始在下一个上游网段(网络B)中嗅探流量时,你可能就会清楚地知道发生了什么。此时 ,你会发现网络B的路由器造成流量丢失或者路由错误。最后,这会引导你修正路由器配置问题,解决更大的麻烦。尽管这个场景显得很宽泛,它的寓义在于当面对多个路由器和网段时,你可能需要四处移动你的嗅探器以了解整个情况。

这也是解释为什么常常需要在多个网段上嗅探多个设备的流量,以便精准定位问题的好例子。

网络图[network maps]

在我们有关网络定位[placement]的讨论中,我们考察了一些不同的网络图。网络图,或者叫network diagram,是一种表示一个网络上所有的技术性资源,以及它们之间如何连接的图表。

除了将网络可视化,没有更好地方法来确定数据包嗅探器的放置位置了。如果你有一幅网络图,请把它放在手边,因为在故障排除和分析过程中它会成为有价值的资产。你甚至想要绘制你自己网络的详细网络图。记住,有时候排除故障的一半战斗是确保你所收集的数据正确。

实践中的嗅探器放置

我们已经看到了在交换机环境中捕获网络流量的4种不同方法。我们还可以再加一种,也就是在我们想要捕获流量的单个设备上简单地安装数据包嗅探程序(即direct install method)。有了这5种方法,确定哪一种是最合适的就令人有些困惑了。下表提供了一些大概的指南。

在交换机环境中进行数据包嗅探的指南
技术 指南
端口镜像
  • 较常使用,因为它不会留下网络痕迹[network footprint],而且不会产生额外的数据包。
  • 它的配置不需要令客户下线,镜像路由器端口或服务器端口方便。
Hubbing out
  • 当不在意使主机暂时离线时较理想。
  • 当必须捕获多个主机的流量时没有效率,因为很可能发生冲突或数据包丢失。
  • 在当前的100/1000Mbps主机上可能导致数据包丢失,因为大多数真正的hub仅支持10Mbps
使用Tap
  • 当不在意使主机暂时离线时较理想。
  • 当需要嗅探光纤连接时,它是唯一选项,
  • 因为tap专门用于嗅探任务,且能适应当前的网络速度,所以它优于hubbing out。
  • 当预算紧张时,可能价格过高。
ARP cache poisoning
  • 被认为是非常不整洁[sloppy]的, 因为它需要将数据包注入网络以便重新路由经过嗅探器的流量。
  • 当需要快速抓取设备流量而且不用令其离线,且无法使用端口镜像时,它是有效的。
直接安装
  • 通常不推荐,because if there is an issue with a host, that issue could cause packets to be dropped or manipulated in such a way that they are not represented accurately.
  • 主机的网卡不需要处于混杂模式。
  • 用于测试环境、检验/基准性能、以及研究创建于别处的捕获文件的最佳选择。

做为分析人员,我们需要尽可能地匿踪[stealthy]。在理想的情况下,我们收集需要的数据,并不会留下痕迹。正如一个法医不想弄脏犯罪现场,我们也不想污染我们捕获的网络流量。

随着我们经历后续章节里的真实场景,我们将讨论基于case-by-case的最佳数据捕获方式。而目前,下面的流程图可以帮你决定用于捕获流量的最佳方法。记住这个流程图仅是一个大概的参考,而且它没有覆盖线路监听的每一种可能情况。

【PPA2】 第二章 监听线路相关推荐

  1. angular4点击事件监听_JavaScript从零开始——DOM事件编程(1)

    事件的本质是程序各个组成部分之间的一种通信方式,也是异步编程的一种实现.DOM 支持大量的事件,本章开始,我们一起看看 DOM 的事件编程. 1 概念 DOM 的事件操作(监听和触发),都定义在Eve ...

  2. 【iOS-Cocos2d游戏开发之五】多触点与触屏事件详解(单一监听、事件分发)

    李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/450.html------- ...

  3. 【iOS-Cocos2d游戏开发之五】【1】多触点与触屏事件详解(单一监听、事件分发)...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/450.html ...

  4. js如何监听元素事件是否被移除_JS移除事件监听的方法 .removeEventListener( )

    JS用addEventListener添加事件监听方法后,可以用removeEventListener来解除监听: element.removeEventListener(event, myFunct ...

  5. 【Linux Centos6/7连接Oracle11g数据库,提示:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务】

    Linux Centos6/7连接Oracle11g数据库,提示:ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 1.登录oracle用户权限并查看监听状况 2.修改配置文件(* ...

  6. oracle重启监听12541,oracle数据 报 “ora-12541:TNS:无监听程序”错误

    PLsql登录oracle数据 报 "ora-12541:TNS:无监听程序"错误,但不输入"数据库"在默认情况下可以登录.并且D:oracleproduct1 ...

  7. [2] 日历任务插件(jquery版)新增日历任务和点击监听

    还是先放上图和源代码 jquery版 : https://gitee.com/under_the_sky/dateTask/tree/master/jquery%E7%89%88 本次为日历任务组件新 ...

  8. SpringBoot | 第三十二章:事件的发布和监听

    前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...

  9. web.py开发web 第四章 Sqlalchemy(事件监听与初始化)

    2019独角兽企业重金招聘Python工程师标准>>> 上一章讲了sqlalchemy的数据库创建,我想大家应该会慢慢喜欢上用这种方式来创建数据库吧,sqlalchemy不仅仅能自动 ...

最新文章

  1. windows10 Selenium Chrome 驱动安装
  2. java聚合excel_java操作excel
  3. 区块链中密码学与安全技术
  4. 安卓逆向_24( 一 ) --- Hook 框架 frida( Hook Java层 和 so层) )
  5. ServerBootstrap
  6. Python高级爬虫实战,JS解密咪咕音乐登录参数分析
  7. 触发器创建删除等操作
  8. 启动Xshell报错:由于找不到MSVCR110.dll,无法继续执行代码。重新安装程序可能会解决此问题
  9. python监控网站更新_Python 通过网站search功能监控网站内容更新
  10. 如何写 peer review
  11. 消逝的光芒 Dying Light for Mac 跑酷僵尸游戏 动作生存游戏
  12. javascript根据浏览器userAgent判断浏览器类型
  13. 关于屏保设置不生效时要了解的几个小技巧!
  14. Excel工作日计算时,怎样去除周末和节假日
  15. DeadException
  16. 【每日一题2019-11-14】-蓝桥杯 prev37 分巧克力
  17. IE起始页被改为 http://www.537.com 的解决
  18. 防止matplotlib画完图后自动关闭NN
  19. C——Linux下的串口编程
  20. 新版阿里云短信接口调用

热门文章

  1. 【Python】np.nonzero()函数
  2. 多肉商店html网页代码,[转载]国外多肉植物及种子购买网站(转载)
  3. 在Linux(unix)中,以波浪线“~”开始的文件名
  4. 台式计算机32位和64位的区别,电脑操作系统32位和64位的区别
  5. 申请计算机课代表,课代表申请书的格式是怎样的啊???
  6. 程序员双十一剁手指南(2020)
  7. UltraEdit 使用技巧笔记(转)
  8. MAC盗版软件下载网站黑名单
  9. 手机QQ视频图像是反的——解决办法
  10. 友达9.87MW隆科太阳能屋顶完成,还将增21MW