网络安全(三)-- 网络嗅探及协议分析技术

  • 目标
    • 了解网络嗅探的基本含义
    • 了解tcpdump工具的基本用法
    • 掌握tcpdump工具抓包保存到文件的方法
    • 熟悉wireshark工具的基本用法
    • 掌握借助wireshark抓包工具分析简单网络协议的方法

6.1. 概述

网络嗅探是一种常用的数据收集、分析的方法:

黑客常通过网络嗅探获取主机或网络的控制权,安全人员亦使用网络嗅探进行信息泄露和攻击行为分析。

嗅探所得数据,可以是用户的账号和密码,也可以是一些商用机密数据。

常用的工具包括tcpdump(命令行)、wireshark(图形界面)

6.2. Tcpdump嗅探器

tcpdump是一个用于捕获网络报文,并输出报文内容的工具。

tcpdump 是一款功能强大的命令行嗅探(抓包)工具。

Tcpdump项目官网, 该项目除提供tcpdump工具外,还提供了一个用于网络流量捕获的c/c++库(可移植), 可用于网络协议分析领域的二次开发。

tcpdump在windows的版本叫WinDUMP,

6.2.1. 牛刀小试

  • 基本用法
itcast@itcast $ sudo tcpdump  -i wlp2s0

-i wlp2s0 , -i选项用来指定网络接口设备,wlp2s0 为我网络设备名称,你的电脑可能为eth0

-v-vv, 选项用来显示更详细(繁琐)的输出

tcpdump的总的输出格式:系统时间 协议 源主机.端口 > 目标主机.端口 数据包参数

  • 典型用法

    tcpdump作为命令行抓包神器, 一般抓包保存,借助wireshark图形化协议分析工具进行分析网络包。

    -w filename , 用于指定保存的文件

itcast@itcast $ sudo tcpdump  -i wlp2s0   -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes

添加 -v, 会显示抓取到的包数量,如下

itcast@itcast $ sudo tcpdump  -i wlp2s0  -v -w wlp2s0_2018.pcap
tcpdump: listening on wlp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
Got 15
  • 帮助信息

    man信息

itcast@itcast $ man tcpdump

-h 选项,显示帮助信息

itcast@itcast $ sudo tcpdump -h
tcpdump version 4.9.2
libpcap version 1.8.1
OpenSSL 1.0.2l  25 May 2017
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ][ -Q in|out|inout ][ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ][ --immediate-mode ] [ -T type ] [ --version ] [ -V file ][ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ][ -Z user ] [ expression ]

6.2.2. 高级过滤技巧

tcpdump作为一个命令行工具,可以包含过滤表达式( filter expression),满足表达式的报文将会被捕获。 如没有给过滤表达式,则网络上所有的信息包将会被捕获。

  • 捕获特定主机的网络包(src, dst)host
itcast@itcast $ sudo tcpdump -i wlp2s0 host 61.135.169.121

host 61.135.169.121 获取源ip或者目标ip为61.135.169.121的网络数据包

  • 捕获特定源IP的网络包 src
itcast@itcast $ sudo tcpdump -i wlp2s0 src 61.135.169.121
11:32:09.605183 IP 61.135.169.121.https > localhost.46000: Flags [.], ack 518, win 808, length 0
。。。
  • 捕获特定目标IP的网络包 dst
itcast@itcast $ sudo tcpdump -i wlp2s0 dst  61.135.169.121 11:33:31.977839 IP localhost.46010 > 61.135.169.121.https: Flags [.], ack 3076821759, win 237, length 0
11:33:31.977858 IP localhost.46004 > 61.135.169.121.https: Flags [.], ack 4115011400, win 237, length 0
。。。
  • 捕获特定端口的网络包 port
itcast@itcast $ sudo tcpdump -i wlp2s0 port 80
  • 捕获特定协议的网络包 tcp/arp/udp/...
itcast@itcast $ sudo tcpdump -i wlp2s0  host 172.16.28.100 and tcp
itcast@itcast $ sudo tcpdump -i wlp2s0  arp
  • 帮助信息
itcast@itcast $ man pcap-filter

补充: 三种逻辑运算: 取非运算( ‘not ' or '! ‘)、 与运算(’and’ or,’&&')、 或运算(’or’ or ‘||’)

6.2.3. 附录

Panda.Guo@2018-04-27 16:15:09 $ man tcpdump
-A 以ASCII格式打印出所有分组,并将链路层的头最小化。
-c 在收到指定的数量的分组后,tcpdump就会停止。
-C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。-d 将匹配信息包的代码以人们能够理解的汇编格式给出。
-dd 将匹配信息包的代码以c语言程序段的格式给出。
-ddd 将匹配信息包的代码以十进制的形式给出。
-D 打印出系统中所有可以用tcpdump截包的网络接口。
-e 在输出行打印出数据链路层的头部信息。
-E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
-f 将外部的Internet地址以数字的形式打印出来。
-F 从指定的文件中读取表达式,忽略命令行中给出的表达式。
-i 指定监听的网络接口。
-l 使标准输出变为缓冲行形式,可以把数据导出到文件。
-L 列出网络接口的已知数据链路。
-m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
-M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
-n 不把网络地址转换成名字。
-nn 不进行端口名称的转换。
-N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
-t 在输出的每一行不打印时间戳。
-O 不运行分组分组匹配(packet-matching)代码优化程序。
-P 不将网络接口设置成混杂模式。
-q 快速输出。只输出较少的协议信息。
-r 从指定的文件中读取包(这些包一般通过-w选项产生)。
-S 将tcp的序列号以绝对值形式输出,而不是相对值。
-s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。
-t 不在每一行中输出时间戳。
-tt 在每一行中输出非格式化的时间戳。
-ttt 输出本行和前面一行之间的时间差。
-tttt 在每一行中输出由date处理的默认格式的时间戳。
-u 输出未解码的NFS句柄。
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
-vv 输出详细的报文信息。
-w 直接将分组写入文件中,而不是不分析并打印出来。

6.3. Wireshark 网络协议分析工具

Wireshark(前身Ethereal)是一个网络报文分析工具。 网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。 2006年6月,因为商标的问题,Ethereal更名为Wireshark。

wireshark 官网

6.3.1. 基本用法

按照国际惯例,从最基本的程序启动说起。

开启抓包

启动wireshark程序后, 在在接口列表中选择接口名称(见下图中标识1),然后点击“开始捕获分组”(见下图标识2)在此接口上抓包。 本例选取enp8s0, 具体因电脑网卡不同而异, 关于enp8s0的含义,后续我写一篇网文做一正式说明。

报文捕获窗口

选取接口名称并点击开始捕获之后,就可以看到实时接收的报文。Wireshark会捕捉系统发送和接收的每一个报文。如果抓取的接口是无线并且选项选取的是混合模式,那么也会看到网络上其他报文。

接下来再界面我们可以看到wireshark抓到的实时数据包。我们对数据包的各个字段进行解释。

  • No:代表数据包标号。
  • Time:在软件启动的多长时间内抓到。
  • Source:来源ip。
  • Destination: 目的ip。
  • Protocol:协议。
  • Length:数据包长度。
  • info:数据包信息。

在上面wireshark抓包窗口中,可以简单分割成三个小窗口,上部窗口每一行对应一个网络报文,点击某一行可以在下面两个窗口看到更多信息。中间窗口描述的是报文里面每一层的详细信息。底 部窗口以十六进制和ASCII码的方式列出报文内容。

停止抓包

在抓包过程中,我们随时可以点击图标停止或启动。来停止或者启动抓取数据包。 

在上图中,标识2的地方, 为停止抓取数据包, 标识3的地方,为再次启动抓取数据包。

6.3.2. 报文过滤及分析

报文过滤,是wireshark出彩的地方,也是网络协议的分析的重要工作步骤

在下图方框中,输入相应的源ip、目的ip、协议等等表达式,点击箭头部分,在窗口中即可显示过滤后的数据包。

  • 典型IP地址过滤表达式

    • ip.src==172.16.28.102 : 指定源IP
    • ip.dst==192.168.0.111 : 指定目标IP
    • ip.addr == 192.0.2.1 : 指定IP,(不区分源和目标IP)
    • ip.src==192.168.43.167 and ip.dst==223.166.152.109 : 指定源ip 并且目标IP
    • ip.src==192.168.43.167 or ip.dst==223.166.152.109 : 指定源ip 或者目标IP
  • 典型端口过滤表达式

    • tcp.port ==52304
    • tcp.dstport==30
    • tcp.srcport==52304
    • udp.....
  • 典型网络协议过滤表达式

    • telnet
    • tcp
    • udp
    • 。。。。

6.3.3. 网络嗅探实战

  • 目标: 通过抓取telnet网络报文, 分析并获取用户登录口令

    telnet 登录典型命令telnet 目标主机ip -l 用户名 , 在Password后输入口令,

itcast@itcast $ telnet 127.0.0.1 -l itcast
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Password: 
---> 输入口令Last login: Thu Sep  6 18:19:01 CST 2018 from localhost on pts/1
。。。。。。
  • 补充

    安装telnet和telnetd服务

itcast@itcast $ sudo apt-get install telnet telnetd

6.3.4. 补充: 普通用户抓包配置

  • 添加wireshark用户组。
Panda.Guo@2018-04-27 10:08:46 $  groupadd wireshark
Panda.Guo@2018-04-27 10:07:30 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128
  • 添加当前用户(我的为panda,具体根据情况决定)到wireshark组
Panda.Guo@2018-04-27 10:12:23 $ sudo usermod -aG wireshark panda
Panda.Guo@2018-04-27 10:13:05 $ sudo cat /etc/group | grep "wireshark"
wireshark:x:128:panda
  • 将dumpcap更改为wireshark用户组
Panda.Guo@2018-04-27 10:16:08 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root root  96464 Jan 23 01:03 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:15:00 $ sudo chmod  root:wireshark /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:16:23 $ ls -l /usr/bin/dumpcap 
-rwxr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap
  • 设置 setuid (root), 使普通用户执行具备root用户权限,或者添加能力

方法一:setuid root

Panda.Guo@2018-04-27 10:19:16 $ sudo chmod 4754 /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:19:34ls -l /usr/bin/dumpcap 
-rwsr-xr-- 1 root wireshark 96464 Jan 23 01:03 /usr/bin/dumpcap

方法二:添加能力

Panda.Guo@2018-04-27 10:20:39 $ sudo setcap  "cap_net_admin,cap_net_raw+eip" /usr/bin/dumpcap
Panda.Guo@2018-04-27 10:21:28sudo getcap /usr/bin/dumpcap 
/usr/bin/dumpcap = cap_net_admin,cap_net_raw+eip

6.4. 知识拓展

  • 网络嗅探的工作原理

    所有网络接口都有一个硬件地址(MAC),用于区别其他网络设备。

    在正常情况下,一个合法的网络接口应该只能响应属于自己的网络数据。

    然而,当将本地网卡设置成混杂状态时,它将对所有网络数据进行响应。

    由于嗅探器工作于网络环境的底层(链路层),它能够拦截所有在网络上传送的数据,再通过相应的软件工具,就可以实时分析这些数据的内容。

  • 交换网络

    在共享网络中,把网卡设为混杂模式就可以监听所有的网络数据包,但是在交换网络中,情况就发生了变化。

    以太网分为共享式以太网和交换式以太网:

    共享式以太网通常以集线器作为网络设备,交换式以太网通常使用交换机作为网络连接设备。

    共享式以太网中数据帧以广播方式传送到每个以太网端口,网内每台主机的网卡能接收到网内的所有数据帧。因此只要把网卡设置成为混杂模式就可以获取到这本地网卡的所有数据帧。

    最典型的交换网络使用交换机连接,在交换机中可以设为一个端口一个MAC地址,形成一个端口对应一个MAC地址对。这样当网络数据包到达端口时,而不是转发给所有的端口,只是转发MAC对应的端口。这样,其他端口的通讯不受干扰,所以其他端口上的主机就无法接收到网络上的数据包了。

Tips:从网络嗅探角度看,交换机连接网络,比hub连接网络要安全。

  • 数据包在局域网内的传输方式

    众所周知,数据包在互联网上的传播是根据IP地址进行寻址的,但是完整的过程并非如此。数据包通过IP地址可以达到的最远的地点就是目标主机所在的子网,而在该子网内的寻址却是使用物理地址的,即MAC地址。

    数据包被传送到目标主机所在的子网时,如果该子网为共享式网络(由集线器连接),数据包将被广播方式传播出去,这意味着该子网内的所有主机都可以接收到该数据包。当主机接收到数据包后通常会先检查其目的MAC地址,如果目的MAC地址不是自己,那么就是丢弃,只有目的MAC地址为自己的数据包才会将其交付给上一层处理。

    Sniffer将网卡设置为混杂模式,这样就可以接收到所有的数据包了,达到了嗅探了目的。

    (如果为交换网络,则根据MAC地址转发到相应主机,当MAC地址为FFFFFFFFFF...全1时广播)。

    上述内容待确认。

  • 设置网卡混杂模式

    网卡当前是否是混杂模式, 关键通过ifconfig命令,查看flags项中,是否有PROMISC.

#设置混杂模式(其中enp8s0为你的网络接口名称,视具体而定)
itcast@itcast $ sudo ifconfig enp8s0 promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0device interrupt 16  #取消混杂模式
itcast@itcast $ sudo ifconfig enp8s0 -promisc
itcast@itcast $ sudo ifconfig enp8s0 
enp8s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500ether e0:db:55:f0:07:d0  txqueuelen 1000  (Ethernet)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0device interrupt 16  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python智能语音识别语翻译平台|项目后端搭建

Python程序设计基础&#xff0c;第三方库Django、requests、hashlib、pyttsx3等的使用&#xff0c;百度API语音识别业务接口、文本朗读业务接口、翻译业务接口的传入。 01、任务实现步骤 任务描述&#xff1a;本任务利用Django框架搭建智能语音识别与翻译平台的后端&#xff0…

ULAM公链第九十六期工作总结

迈入12月&#xff0c;接下来就是雪花&#xff0c;圣诞&#xff0c;新年和更好的我们&#xff01;愿生活不拥挤&#xff0c;笑容不必刻意&#xff0c;愿一切美好如期而至&#xff01; 2023年11月01日—2023年12月01日关于ULAM这期工作汇报&#xff0c;我们通过技术板块&#xff…

CentOS中安装数据库

1.下载 网址&#xff1a;https://dev.mysql.com/downloads/mysql/ 按如图选择&#xff0c;然后点击Download 这里它让我们登录&#xff0c;我们直接选择不登录&#xff0c;直接下载 2.关闭防火墙 systemctl disable firewalld3.正式安装 切换到/usr/local下 cd /usr/l…

Java数据结构之《哈希查找》(难度系数75)

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我写完…

luceda ipkiss教程 39:修改版图text字体的粗细

通过修改font的line_width就可以修改版图中text字体的粗细&#xff1a; 代码如下&#xff1a; from si_fab import all as pdk import ipkiss3.all as i3class demo(i3.PCell):class Layout(i3.LayoutView):def _generate_elements(self, elems):elems i3.PolygonText(layer…

上海亚商投顾:沪指再度失守3000点 两市超4600只个股下跌

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数昨日全线调整&#xff0c;沪指再度失守3000点关口&#xff0c;创业板指尾盘跌近2%&#xff0c;北证50…

轨道交通故障预测与健康管理PHM系统的应用

轨道交通是现代城市中不可或缺的交通方式&#xff0c;它为人们提供了快速、高效和可靠的出行方式。然而&#xff0c;由于轨道交通系统的复杂性和高负荷运行&#xff0c;设备故障和运营中断问题时有发生。为了提高轨道交通系统的可靠性和安全性&#xff0c;故障预测与健康管理&a…

nacos启动报错 java.lang.RuntimeException: [db-load-error]load jdbc.properties error

以standalone mode sh startup.sh -m standalone 为例子 启动nacos 报错&#xff1a; Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcatat org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(To…

Siemens-NXUG二次开发-打开与关闭prt文件[Python UF][20231206]

Siemens-NXUG二次开发-打开与关闭prt文件[Python UF][20231206] 1.python uf函数1.1 NXOpen.UF.Part.Open1.2 NXOpen.UF.Part.LoadStatus1.3 NXOpen.UF.Part.Close1.4 NXOpen.UF.Part.AskUnits 2.示例代码3.运行结果3.1 内部模式3.2 外部模式 1.python uf函数 1.1 NXOpen.UF.P…

财报解读:立足海外音视频直播战场,欢聚的BIGO盾牌还需加强?

如今&#xff0c;音视频社交平台出海早已不是新鲜事&#xff0c;随着时间推移&#xff0c;一批“坚定全球化不动摇”的企业也实现突围&#xff0c;站在出海舞台中心。 若提到中国企业出海范本&#xff0c;欢聚集团定是绕不开的存在。作为最早一批出海的中国互联网企业&#xf…

Socket和Http通信原理

Socket是对TCP/IP协议的封装&#xff0c;Socket本身并不是协议&#xff0c;而是一个调用接口&#xff08;API&#xff09;&#xff0c;通过Socket&#xff0c;我们才能使用TCP/IP协议,主要利用三元组【ip地址&#xff0c;协议&#xff0c;端口】。 Http协议即超文本传输协议&a…

ATECLOUD电源自动测试系统打破传统 助力新能源汽车电源测试

随着新能源汽车市场的逐步扩大&#xff0c;技术不断完善提升&#xff0c;新能源汽车测试变得越来越复杂&#xff0c;测试要求也越来越严格。作为新能源汽车的关键部件之一&#xff0c;电源为各个器件和整个电路提供稳定的电源&#xff0c;满足需求&#xff0c;确保新能源汽车的…

[CAD]接下来导出一张高清大图

选择输出-范围&#xff0c;点击右侧绿色画框&#xff0c;划区一个范围 点击输出区域并设置右侧选项。 下图&#xff0c;大大大 页面设置替代-大大大 输出即可&#xff0c;可以说是非常的清晰了

学习springcloud时遇到java: 找不到符号 符号: 方法 getPname()

学习springcloud时异常-java: 找不到符号 符号: 方法 getPname() 学习springcloud时&#xff0c;遇到获取实体类属性值时出现异常。 项目目前分为两个子模块&#xff0c;一个是实体类模块&#xff0c;另一个是应用层。 在查询数据后&#xff0c;打印pname属性时报错&#xff…

LeetCode 每日一题 Day 4

2477. 到达首都的最少油耗 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 到 n - 1 &#xff0c;且恰好有 n - 1 条路。0 是首都。给你一个二维整数数组 roads &#xff0c;其中 roads[i] [ai,…

【matlab程序】matlab画太极图|阴阳

【matlab程序】matlab画太极图|阴阳 %% 海洋与大气科学; % 时间:20231205; % clear;clc;close all; t=0:1/100000:2pi+0.00001; t1=-pi/2:1/100000:pi/2+0.00001; t2=pi/2:1/100000:3pi/2+0.00001; R=10; r=1; figure plot(Rcos(t),Rsin(t),‘color’,‘k’,‘lin…

Python爬虫技术:如何利用ip地址爬取动态网页

目录 一、引言 二、Python爬虫基础 三、动态网页结构分析 四、利用ip地址爬取动态网页 1、找到需要爬取的动态网页的URL结构 2、构造请求参数 3、发送请求并获取响应 4、解析响应内容 五、实例代码 六、注意事项 七、总结 一、引言 随着互联网的快速发展&#xff0…

并发集合框架

目录 前言 正文 1.集合框架结构 2. ConcurrentHashMap &#xff08;1&#xff09;验证 HashMap 不是线程安全的 &#xff08;2&#xff09;验证 Hashtable 是线程安全的 &#xff08;3&#xff09;验证 Hashtable 不支持并发 remove 操作 &#xff08;4&#xff09…

Windows XP安装SVN软件

SVN全称为SubVersion&#xff0c;是Apache开源软件协议下&#xff0c;一个用于代码分布式管理的工具&#xff0c;其孵化的软件产品是TortoiseSVN&#xff0c;该软件是带图形界面的代码管理工具&#xff0c;类似于Git&#xff0c;多了一个图形界面&#xff0c;方便鼠标操作。  …

加密挖矿、AI发展刺激算力需求激增!去中心化算力时代已来临!

2009年1月3日&#xff0c;中本聪在芬兰赫尔辛基的一个小型服务器上挖出了比特币的创世区块&#xff0c;并获得了50BTC的出块奖励。自加密货币诞生第一天起&#xff0c;算力一直在行业扮演非常重要的角色。行业对算力的真实需求&#xff0c;也极大推动了芯片厂商的发展&#xff…