linux对网络的监控操作学习--端口、流量、IP

文章目录

  • linux对网络的监控操作学习--端口、流量、IP
    • 理解Netfilter队列
    • 设置iptables规则以使用队列
    • 使用用户空间程序处理队列中的数据包
      • linux用户空间
          • 使用Python实现
          • 使用rust实现功能
    • 综合应用
    • 注意事项
    • 其他实现方式
      • nftables
      • firewalld
      • ufw (Uncomplicated Firewall)
      • tc (Traffic Control)
      • SELinux
      • Auditd
      • Fail2ban
      • Snort
      • Suricata
      • NetfilterQueue
      • Conntrack-tools
      • PfSense/OPNsense

linux对网络的监控操作学习–端口、流量、IP

在Linux中,使用NFQUEUE来处理iptables规则匹配的数据包需要与用户空间程序协作。NFQUEUE将数据包发送到一个用户空间的队列,然后由用户空间程序决定对这些数据包进行什么操作(比如接受、丢弃、修改等)。

理解Netfilter队列

Netfilter队列(nfqueue)是一种机制,允许iptables的数据包经过用户空间程序的处理后再决定是否接受、拒绝或修改这些数据包。这种机制提供了一种灵活的方式来对网络数据包进行深入分析和处理。

设置iptables规则以使用队列

首先,你需要设置iptables规则,将特定的流量定向到nfqueue队列。

例如,如果你想要对进入网卡eth0上的所有TCP流量进行处理,可以使用以下命令:

sudo iptables -A INPUT -i eth0 -p tcp -j NFQUEUE --queue-num 0

这条命令的意思是:将进入eth0接口、协议为TCP的所有数据包加入到编号为0的队列中。

sudo iptables -A FORWARD -j NFQUEUE --queue-num 666

这个命令将所有转发的数据包发送到编号为666的NFQUEUE。

使用用户空间程序处理队列中的数据包

linux用户空间

Linux系统中的用户空间程序指的是运行在用户空间的软件应用程序,与运行在内核空间的内核程序相对。用户空间和内核空间是操作系统内存中的两个主要区域,它们为操作系统的运行提供了隔离和保护机制。

  1. 用户空间(User Space):用户空间是指非内核代码运行的内存区域,即普通的应用程序运行的地方。这些应用程序不能直接访问硬件设备,它们通过系统调用(System Calls)与内核空间通信,请求内核执行诸如读写文件、发送网络数据包、访问硬件设备等操作。用户空间提供了一个相对安全的环境,因为即使用户空间的程序崩溃,也不会直接影响到系统的稳定性。

  2. 内核空间(Kernel Space):内核空间是操作系统内核运行的内存区域。内核是操作系统的核心部分,负责管理计算机的硬件资源,如处理器、内存和外设。内核空间的代码可以直接访问硬件设备,并执行CPU指令。由于具有这样的权限,内核空间的代码必须非常可靠,任何错误都可能导致整个系统崩溃。

用户空间程序的例子非常广泛,包括但不限于:

  • 文本编辑器:如Vim、Emacs等。
  • Web浏览器:如Firefox、Chrome等。
  • 办公软件:如LibreOffice、OpenOffice等。
  • 开发工具:如GCC、Clang、Python解释器等。
  • 图形界面:如GNOME、KDE等。
  • 数据库:如MySQL、PostgreSQL等。
  • 网络服务:如Apache HTTP服务器、Nginx等。

总之,用户空间程序包括几乎所有普通用户直接使用的软件应用程序,而这些程序通过与内核空间进行交互,来实现对硬件资源的访问和管理。

接下来,你需要有一个用户空间程序来处理这个队列中的数据包。这个程序可以使用libnetfilter_queue库来与nfqueue交互。

可以根据需要编写程序来分析、修改或决定是否接受这些数据包。

使用Python实现

一个简单的例子是使用Python编写的程序,该程序依赖于NetfilterQueue库来处理数据包:

#安装scapy以运行下列代码
pip install scapy
from netfilterqueue import NetfilterQueue
import scapy.all as scapydef process_packet(packet):scapy_packet = scapy.IP(packet.get_payload())  # 将数据包转换为Scapy可处理的格式if scapy_packet.haslayer(scapy.TCP):if scapy_packet[scapy.TCP].dport == 80:if "特定模式" in str(scapy_packet[scapy.Raw].load):print("检测到特定模式,数据包被丢弃")packet.drop()  # 丢弃数据包returnpacket.accept()  # 其他情况接受数据包nfqueue = NetfilterQueue()
nfqueue.bind(666, process_packet)  # 绑定到之前设置的队列编号666try:print("开始处理队列...")nfqueue.run()
except KeyboardInterrupt:print("停止处理队列")nfqueue.unbind()  # 释放绑定的队列

在这个示例中,我们使用了Scapy库来解析和操作数据包。首先,我们将NetfilterQueue获取的原始数据包转换为Scapy可以处理的格式。然后,我们检查每个TCP数据包,如果它是针对端口80(HTTP通常使用的端口),我们就检查数据包的负载是否包含“特定模式”。如果是,我们就调用packet.drop()来丢弃这个数据包,否则我们就接受这个数据包。

使用rust实现功能

使用libpnet库来处理网络数据包,以及nfqueue库来与Netfilter队列交互。

Cargo.toml文件中,你可以添加如下依赖

[dependencies]
pnet = "0.28.0"
nfqueue = "0.6.0"

处理数据包

use nfqueue::{Queue, Verdict};
use pnet::packet::tcp::TcpPacket;
use pnet::packet::Packet;
use std::net::Ipv4Addr;fn main() {let mut queue = Queue::new();queue.open();queue.bind(0).expect("无法绑定到队列");queue.set_mode_copy(0xffff).expect("无法设置模式");loop {let nfmsg = queue.recv().expect("接收错误");let payload = nfmsg.get_payload();let ipv4_packet = pnet::packet::ipv4::Ipv4Packet::new(payload).unwrap();if ipv4_packet.get_next_level_protocol() == pnet::packet::ip::IpNextHeaderProtocols::Tcp {if let Some(tcp_packet) = TcpPacket::new(ipv4_packet.payload()) {if tcp_packet.get_destination() == 80 {// 这里添加基于数据包内容进行过滤的逻辑// 例如,检查HTTP请求的Host头部或其他特定模式// 如果匹配,则丢弃数据包// queue.set_verdict(nfmsg, Verdict::Drop);}}}// 如果不匹配任何过滤条件,则接受数据包queue.set_verdict(nfmsg, Verdict::Accept);}
}

使用nfqueue库来接收Netfilter队列中的数据包,并使用pnet库来解析IPv4和TCP数据包。这个程序会持续运行,并对每个接收到的数据包进行处理。如果数据包是针对HTTP服务的(目的端口为80),你可以在这里添加自己的逻辑来检查数据包内容并决定是否丢弃它。

综合应用

通过上述步骤,你可以实现对特定网络流量的深度监控和管理。

比如,你可以基于数据包内容进行过滤,阻止特定类型的流量,或者实现基于内容的路由决策等。

注意事项

  • 使用nfqueue时,确保系统中安装了相应的库和工具。
  • 根据实际需求调整iptables规则和用户空间程序的逻辑。
  • 考虑到性能和安全性,仔细规划哪些流量需要通过nfqueue处理。

通过结合iptables和队列,你可以实现复杂且灵活的网络管控策略,有效地管理和保护你的网络环境。

其他实现方式

nftables

nftables是iptables的后继者,提供了一个更现代和简洁的方式来管理网络相关的钩子。它使用一个新的命令行工具nft并提供了一个新的配置语法。

  • 安装步骤: 大多数现代Linux发行版已经预装了nftables。如果没有,可以通过包管理器安装,如sudo apt install nftables。
  • 特点: 提供了一个统一的框架替代ip(6)tables,并且有更简洁的语法。
  • 优缺点: 优点是配置更加直观,性能更好;缺点是相对较新,部分老系统可能不支持。
  • 基本操作: 使用nft命令创建、编辑规则和表,如nft add rule ip filter input tcp dport 22 accept。
  • 高级用法: 支持更复杂的过滤逻辑,如使用集合和映射来管理规则。
  • 使用场景: 适用于需要高级网络配置和细粒度控制的环境。

firewalld

firewalld是一个动态管理防火墙的工具,它提供了区域(zone)-based的防火墙配置。firewalld使用firewall-cmd命令行工具进行管理,并可以使用nftables作为其后端。

  • 安装步骤: 通常预装在Fedora、CentOS等发行版上,可以通过sudo yum install firewalld安装。
  • 特点: 基于区域(zone)的防火墙管理,支持动态更新规则而不中断当前连接。
  • 优缺点: 优点是易于管理和动态配置;缺点是可能不如直接使用iptables/nftables灵活。
  • 基本操作: 使用firewall-cmd来管理规则,如firewall-cmd --zone=public --add-port=22/tcp --permanent。
  • 高级用法: 支持富规则(rich rules),可以添加更详细的规则条件。
  • 使用场景: 适用于桌面用户或需要频繁变更规则的服务器。

ufw (Uncomplicated Firewall)

ufw是一个面向用户友好的前端工具,用于管理基于netfilter的防火墙。它旨在简化防火墙配置过程。

  • 安装步骤: 在Ubuntu和Debian上通常预装,否则可以通过sudo apt install ufw安装。
  • 特点: 易于使用的命令行界面,适合初学者。
  • 优缺点: 优点是简单易用;缺点是功能相对有限,不适合复杂的网络环境。
  • 基本操作: 使用ufw allow和ufw deny来简单地允许或拒绝流量。
  • 高级用法: 可以通过编辑配置文件来实现更复杂的规则设置。
  • 使用场景: 适合新手或者对防火墙要求不高的个人用户。

tc (Traffic Control)

tc是Linux内核中的流量控制工具。它可以用来控制网络流量的速率以及处理网络接口上的数据包排队。

  • 安装步骤: tc通常作为iproute2包的一部分,默认安装在大多数Linux系统上。
  • 特点: 强大的流量控制工具,可以控制带宽分配、排队策略等。
  • 优缺点: 优点是功能强大、灵活;缺点是学习曲线陡峭,配置复杂。
  • 基本操作: 使用tc qdisc add来添加排队规则,如限制接口速率。
  • 高级用法: 可以配置复杂的排队策略和类别(class)系统来进行细致的带宽管理。
  • 使用场景: 适用于需要详细控制网络流量行为的高级用户和服务器管理员。

SELinux

安全增强型Linux(SELinux)可以用来细粒度控制程序的网络访问能力。

  • 安装步骤:SELinux通常作为许多Linux发行版的一部分预装,如Red Hat和CentOS。确保SELinux已安装可以使用命令 sestatus。

  • 特点:SELinux提供了强制访问控制(MAC),它使用安全策略来限制程序能够访问的资源。

  • 优缺点:

    • 优点: 提供了非常强大的安全性,可以细粒度地控制系统权限。
      缺点: 配置复杂,学习曲线陡峭。
  • 基本操作:

    • 查看状态: sestatus
    • 切换模式: setenforce Enforcing 或 setenforce Permissive
    • 管理策略: 使用 semanage 命令。
  • 高级用法:

    • 创建自定义策略模块。
    • 使用audit2allow根据审计日志生成策略。
  • 使用场景:

    • 适用于需要高级安全性要求的环境,如金融服务、政府机构等。

Auditd

[!NOTE]

点击链接可查看对应具体介绍博文。

auditd是Linux系统的审计守护进程,可以记录系统上的所有活动,包括网络活动,提供详细的审计功能。

Fail2ban

Fail2ban是一个入侵防御软件框架,能够自动修改防火墙规则来封禁那些看起来有恶意行为、例如密码猜测尝试的IP地址。

  • 安装步骤:

    • 通常通过包管理器安装,例如在基于Debian的系统上使用 sudo apt install fail2ban。
  • 特点:

    • Fail2ban是一个入侵防御软件,可以监控日志文件(如SSH)并封禁显示恶意行为特征的IP地址。
  • 优缺点:

    • 优点: 简单易用,可以有效减少自动化攻击。
    • 缺点: 对复杂或分布式攻击的防御能力有限。
  • 基本操作:

    • 启动服务:sudo systemctl start fail2ban
    • 查看封禁的IP列表:sudo fail2ban-client status sshd
  • 高级用法:

    • 自定义jail配置文件来监控不同的服务和日志文件。
    • 编写复杂的过滤器正则表达式来匹配更加复杂的攻击模式。
  • 使用场景:

    • 适用于任何暴露在互联网上的服务器,特别是那些受到频繁恶意登录尝试的服务器。

Snort

Snort是一个开源网络入侵检测系统(NIDS),可以实时监测网络流量并进行分析,以检测和防止入侵。

  • 安装步骤:

    • Snort通常从源代码编译安装,或者从其官方网站下载预编译的二进制文件。
  • 特点:
    Snort是一个功能强大的网络入侵检测系统(NIDS),可以进行实时流量分析和数据包记录。

  • 优缺点:

    • 优点: 非常灵活,有大量的社区支持和规则集。
    • 缺点: 配置和维护较为复杂,需要专业知识。
  • 基本操作:

    • 配置snort.conf文件。
    • 运行Snort以监控网络流量:snort -q -A console -i eth0 -c /etc/snort/snort.conf
  • 高级用法:

    • 编写自定义规则以检测特定的攻击和威胁。
    • 使用Snort作为一个内联IPS(入侵防御系统)。
  • 使用场景:

    • 适用于需要实时监控和分析网络流量以检测潜在威胁的企业和数据中心环境。

Suricata

Suricata是一个高性能的网络IDS、IPS和网络安全监控工具。

  • 安装步骤:

    • 通过包管理器安装,例如 sudo apt install suricata,或从源代码编译安装。
  • 特点:

    • Suricata是一个高性能网络IDS、IPS和网络安全监测工具。
  • 优缺点:

    • 优点: 多线程设计,可以处理高吞吐量的网络流量;支持自动化规则更新。
    • 缺点: 和Snort一样,配置较为复杂,并且对资源的要求相对较高。
  • 基本操作:

    • 配置suricata.yaml文件。
    • 启动Suricata来监控指定接口:suricata -c /etc/suricata/suricata.yaml -i eth0
  • 高级用法:

    • 使用Suricata的高级特征,如HTTP/2分析、TLS指纹等。
    • 集成到其他安全工具链中,如ELK栈进行日志分析。
  • 使用场景:

    • 适用于需要先进威胁检测和事件响应的大型网络环境。

NetfilterQueue

[!NOTE]

开篇主要介绍内容

NetfilterQueue库允许用户空间程序决定接收、拒绝或修改通过iptables的数据包。

  • 安装步骤:

    • NetfilterQueue通常作为Python库安装,可以使用 pip install NetfilterQueue 安装。
  • 特点:

    • NetfilterQueue允许Python程序接收由iptables生成并放入队列中的数据包,进行处理后再放回网络堆栈。
  • 优缺点:

    • 优点: 可以在用户空间对数据包进行灵活处理。
    • 缺点: 性能限制,不适合处理高速网络流量。
  • 基本操作:

    • 使用Python脚本与NetfilterQueue交云,并处理数据包
    • 在iptables中设置规则将数据包重定向到NFQUEUE。
  • 高级用法:

    • 结合数据包分析工具(如Scapy)来实现复杂的数据包修改和分析逻辑。
  • 使用场景:

    • 适合研究、开发和测试环境,以及需要自定义数据包处理逻辑的场合。

Conntrack-tools

这是一组用户空间工具,用于管理与netfilter相关的连接跟踪系统。

  • 安装步骤:

    • 通过包管理器安装,例如 sudo apt install conntrack。
  • 特点:

    • Conntrack-tools是用于管理netfilter的连接跟踪系统的工具集。
  • 优缺点:

    • 优点: 提供了丰富的命令行工具来管理和监控连接跟踪表。
    • 缺点: 主要面向专业用户,对新手可能不够友好。
  • 基本操作:

    • 查看当前跟踪的连接:conntrack -L
    • 删除跟踪条目:conntrack -D
  • 高级用法:

    • 使用conntrack事件来触发自定义脚本和警报。
    • 集成到复杂的网络监控和管理系统中。
  • 使用场景:

    • 适用于需要细粒度网络连接跟踪和分析的环境,如大型数据中心或ISP运营商。

PfSense/OPNsense

这些是基于BSD的开源防火墙和路由器解决方案,它们提供了丰富的网络安全功能。

  • 安装步骤:

    • pfSense/OPNsense:
    • 下载ISO文件从官方网站。
    • 制作启动USB驱动器或光盘。
    • 在目标硬件上启动并遵循安装向导。
  • 特点:

    • 提供防火墙、VPN、IDS/IPS、负载均衡等多种功能。
    • 基于插件的系统,可以扩展功能。
    • 用户友好的Web界面管理。
    • 支持高可用性和多WAN配置。
  • 优缺点:

    • 优点:

      • 灵活而强大,适合从家庭办公室到企业环境。
      • 社区支持广泛,有大量的文档和论坛。
      • 定期更新和安全修补。
    • 缺点:

      • 对新手来说配置可能较为复杂。
    • 硬件兼容性问题可能会出现在特定的环境中。

    • OPNsense相对较新,社区和插件库可能不如pfSense成熟。

  • 基本操作:

    • 通过Web界面进行设备配置和监控。
    • 设置网络接口和VLANs。
    • 配置NAT规则和防火墙策略。
    • 实施用户认证和VPN设置。
  • 高级用法:

    • 设置高可用性集群,以防单点故障。
    • 配置和调优IDS/IPS(如Snort或Suricata)。
    • 实施流量整形和带宽管理。
    • 集成第三方服务和应用。
  • 使用场景:

    • 适用于需要稳固、可靠且功能全面的网络边界保护的环境。

    • 企业级路由器、防火墙替代解决方案。

    • 在需要高度可定制网络环境中作为VPN网关或IDS/IPS设备。

    • 对新手来说配置可能较为复杂。

    • 硬件兼容性问题可能会出现在特定的环境中。

    • OPNsense相对较新,社区和插件库可能不如pfSense成熟。

  • 基本操作:

    • 通过Web界面进行设备配置和监控。
    • 设置网络接口和VLANs。
    • 配置NAT规则和防火墙策略。
    • 实施用户认证和VPN设置。
  • 高级用法:

    • 设置高可用性集群,以防单点故障。
    • 配置和调优IDS/IPS(如Snort或Suricata)。
    • 实施流量整形和带宽管理。
    • 集成第三方服务和应用。
  • 使用场景:

    • 适用于需要稳固、可靠且功能全面的网络边界保护的环境。
    • 企业级路由器、防火墙替代解决方案。
    • 在需要高度可定制网络环境中作为VPN网关或IDS/IPS设备。

OPNsense致力于提供更现代化的用户界面和更频繁的更新,而pfSense则以稳定性和成熟的社区支持为特点。

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

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

相关文章

Java JNI调用本地方法1(调用C++方法)

一、基础概念 1、JNI(Java Native interface):sun公司提供的JNI是Java平台的一个功能强大的接口,实现java和操作系统本地代码的相互调用功能,系统本地代码通常是由其他语言编写的,如C。 二、JNI使用步骤 1、定义一个J…

选定进行压缩的卷可能已损坏。请使用chkdsk来修复损坏问题,然后尝试再次压缩该卷

Windows Server 2008R2环境下,进行磁盘重新分区时,想要对系统盘进行“压缩卷”,结果报错提示“选定进行压缩的卷可能已损坏。请使用Chkdsk来修复损坏问题,然后尝试再次压缩该卷。”这是硬盘出现了坏道导致的,硬盘出错无…

中仕公考:教师编制和事业单位d类一样吗?

教师编制和事业单位D类在考试内容、专业要求、晋升途径等方面有很大的不同中仕为大家介绍一下: 考试内容:教师编的考试包括教育综合知识和学科专业知识,有的地区会额外考公共基础知识。事业单位D类的考试更侧重于职业能力倾向测验和综合应用…

Linux的学习之路:14、文件(1)

摘要 有一说一文件一天学不完,细节太多了,所以这里也没更新完,这里部分文件知识,然后C语言和os两种的文件操作 目录 摘要 一、文件预备 二、c文件操作 三、OS文件操作 1、系统文件I/O 2、接口介绍 四、思维导图 一、文件…

uniapp全局监听分享朋友圈或朋友

把大象装进冰箱需要几步: 1、创建shart.js文件 export default{data(){return {//设置默认的分享参数//如果页面不设置share,就触发这个默认的分享share:{title:标题,path:/pages/index/index,imageUrl:图片,desc:描述,content:内容}}},onLoad(){let ro…

若依前后端部署到一起

引用:https://blog.csdn.net/qq_42341853/article/details/129127553 前端改造: 配置打包前缀 修改router.js 编程hash模式: 前端打包:npm run build:prod 后端修改: 添加thymeleaf包,和配置文件 spri…

JAVA 项目<果园之窗>_1

这几天有空看能不能把水果店管理系统整出来,目标是整个网页版本的,以我的电脑做服务器,数据存在mysql中 以我目前的理解整个项目大致可分为前端部分、后端部分、数据库部分,也就这三个部分 目前打开并运行了一个别人的项目&#…

leetcode(474.最大连续1的个数)(python)

看数据范围知,复杂度不超过(nlogn),不过感觉LeetCode很少卡算法时间。 题目要求数组的*****的个数,想到dp动态规划 dp[i][0]表示前i个数字,以第i个元素结尾,全为1的个数 dp[i][1]表示前i个数…

React间接实现一个动态组件逻辑

在开发一个浏览器插件的时候,用的plasmo框架和react支持的,里面使用react开发一个菜单功能,但是又不想使用react-router,所以就想着能不能使用一个很简单的方式做一个替代方案?那肯定是可以。 我在引入一个组件后&…

vue2响应式 VS vue3响应式

Vue2响应式 存在问题: 新增属性,删除属性,界面不会更新。 直接通过下标修改数组界面不会自动更新。 Vue2使用object.defineProperty来劫持数据是否发生改变,如下: 能监测到获取和修改属性: 新增的属性…

C++笔记:类和对象(一)

类和对象 认识类和对象 先来回忆一下C语言中的类型和变量,类型就像是定义了数据的规则,而变量则是根据这些规则来实际存储数据的容器。类是我们自己定义的一种数据类型,而对象则是这种数据类型的一个具体实例。类就可以理解为类型&#xff0c…

line 1:20 no viable alternative at input ‘point,‘

背景 遇到一个蛋疼的问题,搞得老夫难受的一,解决了索性记录下 Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession61b0005f] was not registered for synchronization because synchronization is not activ…

python爬虫-----深入了解 requests 库(第二十五天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

openAI tts Java文本转语音完整前后端代码 html

Java后端代码 maven 仓库&#xff1a; <!--openAI 请求工具--> <dependency><groupId>com.unfbx</groupId><artifactId>chatgpt-java</artifactId><version>1.1.5</version> </dependency>maven 仓库官方 tts 使用案例…

浅析RED和EN 18031

文章目录 前言欧盟的法律文件什么是REDRED的发展EU 2022/30法规EU 2023/2444RED与EN 18031的关系 前言 提示&#xff1a;本文大致表述了欧盟的一些立法常识&#xff0c;RED的由来与发展&#xff0c;以及它跟EN 18031的关系 因为工作原因&#xff0c;最近稍微研究了一下欧盟即将…

微波炉定时器开关

微波炉火力调节开关及定时器开关内部结构 参考链接&#xff1a; 微波炉火力调节开关及定时器开关判断好坏小经验-百度经验 (baidu.com)https://jingyan.baidu.com/article/5d6edee2d175c399eadeecfd.html微波炉拆解图示&#xff0c;微波炉结构原理&#xff0c;轻松玩转微波炉维…

AI大模型探索之路-应用篇14:认识国产开源大模型GLM

目录 前言 一、国产主流大模型概览 1. 国内主流大模型清单 2. 主流大模型综合指数 3. 大语言模型评测榜单 二、GLM大模型介绍 三、GLM大模型发展历程 四、GLM家族之基座模型GLM-130B 五、GLM家族之ChatGLM3 六、GLM家族之WebGLM 七、GLM家族之CogVLM 1. CogVLM 2. …

春招冲刺百题计划|栈

Java基础复习 Java数组的声明与初始化Java ArrayListJava HashMapJava String 类Java LinkedListJava Deque继承LinkedListJava Set 第一题&#xff1a;有效的括号 很简单的题&#xff0c;从大一做到现在&#xff0c;就是复习一下语法。 class Solution {public boolean i…

系统架构最佳实践 -- 新能源汽车产业架构设计

随着环保意识的增强和能源结构的转型&#xff0c;新能源汽车产业正迅速崛起成为汽车行业的新宠。构建一个完善的新能源汽车产业架构对于推动产业发展、提升竞争力至关重要。本文将从设计原则、关键技术、产业生态等方面&#xff0c;探讨如何设计与实现新能源汽车产业架构。 新能…

LabVIEW专栏六、LabVIEW项目

一、梗概 项目&#xff1a;后缀是.lvproj&#xff0c;在实际开发的过程中&#xff0c;一般是要用LabVIEW中的项目来管理代码&#xff0c;也就是说相关的VI或者外部文件&#xff0c;都要放在项目中来管理。 在LabVIEW项目中&#xff0c;是一个互相依赖的整体&#xff0c;可以包…