当前位置: 首页 > news >正文

Linux小课堂: 从IPv4到IPv6、主机名解析及网络接口管理

IP地址的结构与演进:IPv4 与 IPv6 的深度解析

每台接入互联网(Internet)的设备都会被分配一个唯一的IP地址,作为其在网络中的身份标识
当前主流的IP协议版本为 IPv4 和 IPv6

1 ) IPv4 地址格式及其限制

  • IPv4 是“Internet Protocol version 4”的缩写,使用32位二进制数表示。
  • 其常见表示形式为四个以点分隔的十进制数字,如 43.136.208.71
  • 每段数值范围为 0 到 255,对应一个8位字节(即 28=2562^8 = 25628=256 种取值,从0到255),因此整个地址空间共可提供 232≈42.9亿2^{32} \approx 42.9亿23242.9亿 个唯一地址。
  • 随着物联网和移动设备爆发式增长,IPv4 地址已于 2011年2月3日全球耗尽,推动了向 IPv6 的迁移。

技术细节补充:
IPv4 地址本质上是32位无符号整数,可通过编程方式转换:

function ipToNumber(ip: string): number {return ip.split('.').reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0);
}function numberToIp(num: number): string {return [(num >> 24) & 0xff, (num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff].join('.');
}

2 ) IPv6 的设计优势与地址结构

  • IPv6 是下一代互联网协议,地址长度扩展至 128位二进制数,极大缓解地址枯竭问题。

  • 可用地址总数高达 2128≈3.4×10382^{128} \approx 3.4 \times 10^{38}21283.4×1038,足以让地球上的每一粒沙子都拥有多个独立IP。

  • 表示形式为 八组四位十六进制数,以冒号分隔,例如:

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    
  • 支持压缩规则:连续多组全零可用双冒号 :: 替代(但只能出现一次),如上例可简写为:

    2001:db8:85a3::8a2e:370:7334
    
  • 总地址数量高达 2128≈3.4×10382^{128} \approx 3.4 \times 10^{38}21283.4×1038,足以满足未来数百年内每个设备拥有多个 IP 的需求

  • IPv6 不仅解决了地址枯竭问题,还增强了安全性、自动配置能力及路由效率,是下一代网络的核心协议

注意术语准确性:

  • “IP” 是 Internet Protocol 的缩写,不是 “Internet Protogirl”
  • “version” 缩写为 “v”,故 IPv4 表示 Internet Protocol version 4
  • IPv6 中每组为 16位(4个十六进制字符),共计 8 组 × 16 位 = 128 位

3 ) DNS 解析系统

  • 实际访问网站时,浏览器通过 DNS(Domain Name System)服务器 查询对应 IP 地址。
  • 例如输入 github.com 后,本地系统会向 DNS 发起请求,获取其动态变化的 IP 地址(如 13.229.188.5913.250.177.233)。
  • DNS 是分布式的全球数据库系统,普通用户无法修改公共记录,否则将影响全球访问。

4 ) 本地 hosts 文件自定义解析

  • 虽不能更改公共 DNS,但可在本机通过编辑 /etc/hosts 文件实现 静态 IP 与主机名绑定

  • 示例操作:

    sudo vim /etc/hosts
    
  • 添加如下内容:

    13.250.177.233    github.com
    192.168.0.5      father-laptop
    
  • 格式要求:IP 地址与主机名之间至少一个空格或制表符分隔,每行一条记录。

  • 特殊保留地址:

    • 127.0.0.1localhost (IPv4 回环地址)
    • ::1localhost (IPv6 回环地址)

此方法在以下场景极为实用:

  • 公共 DNS 故障时临时恢复访问
  • 局域网内设备命名简化访问路径
  • 开发测试环境模拟线上域名行为

主机名与域名解析机制:FQDN 与 DNS 系统原理

为了便于人类记忆,网络引入了主机名(hostname) 和 域名系统(DNS, Domain Name System) 来实现 IP 地址与易读名称之间的映射

直接记忆一串数字(如 IP 地址)对人类而言困难且易错,因此引入了更具可读性的 主机名(Hostname) 和 域名(Domain Name) 来映射 IP 地址

1 ) 完整限定域名 FQDN 的构成

  • 主机名应称为 Fully Qualified Domain Name(FQDN),由两部分组成:
    • Hostname:如 www
    • Domain Name:如 github.com
    • 合并后形成完整主机名:www.github.com
  • 示例:
    • github.com 对应服务器的实际 IP 地址(目前可能是 13.229.188.59 或动态变化)
    • 每次访问时,浏览器通过 DNS 查询获取最新 IP
  • 注意:Hostname 与 Domain Name 是不同概念。前者指具体设备名称,后者代表组织或区域层级结构

关键认知:

  • IP 地址可能随时间或负载均衡策略而变更
  • 用户依赖 DNS 自动完成解析,无需手动记忆复杂地址

FQDN 是唯一且全局可解析的标识符。用户访问 github.com 时,实际是通过 DNS(Domain Name System)服务器 查询该域名对应的 IP 地址

常见的公共 DNS 服务包括 Google 的 8.8.8.8、Cloudflare 的 1.1.1.1 等。当本地无法解析时,操作系统会向配置的 DNS 服务器发起请求,获取目标域名的 A 记录(IPv4)或 AAAA 记录(IPv6)

示例:github.com 当前可能解析为 13.229.188.59(IPv4)或 2606:50c0:8000::93(IPv6),但这些地址可能随 CDN 负载均衡策略动态变化

2 ) 使用 host 命令进行正向与反向解析
Linux 提供 host 工具用于查询域名对应的 IP 地址(正向解析),或根据 IP 查找主机名(反向解析):

正向解析:获取 github.com 的当前 IP
$ host github.com
github.com has address 13.250.177.233 反向解析:通过 IP 查找主机名
$ host 13.250.177.233
233.177.250.13.in-addr.arpa domain name pointer lb-13-250-177-233-sea.github.com.

注意:由于 CDN 和负载均衡的存在,同一域名在不同时间返回不同 IP 属于正常现象

3 ) 本地自定义解析:/etc/hosts 文件配置
当公共 DNS 服务不可用时,可通过修改本机 /etc/hosts 实现手动绑定 IP 与主机名。

该文件结构简单,每行包含一个条目:

IP地址    主机名 [别名...]

典型内容如下:

127.0.0.1       localhost localhost.localdomain
::1             localhost ipv6-localhost ipv6-loopback

其中:

  • 127.0.0.1 是 IPv4 回环地址;
  • ::1 是 IPv6 回环地址;
  • 所有发往此地址的数据包均返回本机,不经过物理网络接口。

操作步骤(需 root 权限):

sudo vim /etc/hosts

添加如下条目(格式:IP地址<空格>主机名):

示例

示例 1:固定 GitHub 访问地址
13.250.177.233    github.com www.github.com示例 2:局域网内设备命名
192.168.0.5       father-laptop.home 

作用场景包括:

  • 跳过故障 DNS 服务器,临时恢复网站访问
  • 开发测试中模拟生产环境域名
  • 局域网设备命名简化 SSH 登录流程

SSH 连接优化示例:
若父辈电脑运行 OpenSSH 且用户名为 oscar,则可通过别名直接连接:

ssh oscar@father-laptop.home 

而非输入原始 IP ssh oscar@192.168.0.5

网络接口管理与 ifconfig 命令详解

Linux 系统通过 网络接口(Network Interface) 实现物理或虚拟的网络连接
使用 ifconfig 命令可查看和配置这些接口状态
ifconfig 是经典工具,用于查看和配置这些接口

1 ) 安装与启用 ifconfig

  • 在较新发行版中,ifconfig 已被 ip 命令取代,但仍可通过安装 net-tools 包恢复支持:
CentOS/RHEL 系列
sudo yum install net-tools -yUbuntu/Debian 系列
sudo apt-get install net-tools -y

2 ) 常见网络接口类型解析

执行 ifconfig 输出通常包含以下三类核心接口:

接口名称类型功能说明
eth0有线网卡Ethernet 缩写,对应 RJ-45 网线连接,如 eth1, eth2 表示第二、第三块网卡
wlan0无线网卡Wireless Local Area Network 缩写,代表第一块 Wi-Fi 网卡;多卡则依次为 wlan1, wlan2
lo回环接口Loopback 接口,IP 为 127.0.0.1,用于本机服务自测

执行 ifconfig 查看接口状态

ifconfig

典型输出包含以下三类主要接口:

2.1. eth0 —— 有线以太网接口
代表第一块以太网卡(Ethernet Interface),通常通过 RJ-45 网线连接路由器或交换机。

输出示例:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255ether 00:1a:2b:3c:4d:5e  txqueuelen 1000

关键字段说明:

  • inet: 分配的 IPv4 地址;
  • netmask: 子网掩码,决定局域网范围;
  • ether: MAC 地址(硬件地址);
  • 若存在 eth1, eth2,则分别表示第二、第三块有线网卡。

2.2. lo —— 回环接口(Loopback)
虚拟网络接口,用于本机通信测试,IP 固定为 127.0.0.1(IPv4)或 ::1(IPv6)。

用途包括:

  • 测试 Web 服务器是否正常运行;
  • 避免暴露服务至外网;
  • 数据库本地监听连接(如 MySQL 绑定 127.0.0.1)。

示例:

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536 inet 127.0.0.1  netmask 255.0.0.0

2.3. wlan0 —— 无线网络接口
代表第一块无线网卡(Wireless Local Area Network),用于 WiFi 连接。

若有多张无线网卡,则依次命名为 wlan1, wlan2 等。

示例:

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 inet 192.168.1.105  netmask 255.255.255.0  broadcast 192.168.1.255inet6 fe80::a2ea:5dff:feaa:bbaa  prefixlen 64  scopeid 0x20<link>

支持同时显示 IPv4 与 IPv6 地址。

深入理解 lo 接口用途:

  • 所有发送至 127.0.0.1 的数据包不会离开主机,直接返回。
  • 常用于本地开发调试 Web 服务(如监听 localhost:3000),确保只有本机能访问,增强安全性。
  • 在 NestJS 应用中可指定绑定地址:
    // main.ts
    async function bootstrap() {const app = await NestFactory.create(AppModule);await app.listen(3000, '127.0.0.1'); // 仅允许本地访问
    }
    bootstrap();
    

关键特性解析:

  • eth0:典型用于服务器或台式机的有线网络接入,稳定高速。

  • wlan0:移动设备或笔记本常用,依赖无线路由器进行 NAT 转换上网。

  • lo:虚拟接口,所有发往 127.0.0.1 的数据包均不会离开本机,常用于启动 Web 服务调试:

    示例:NestJS 应用监听回环地址
    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';async function bootstrap() {const app = await NestFactory.create(AppModule);await app.listen(3000, '127.0.0.1'); // 仅限本地访问
    }
    bootstrap();
    

浏览器访问 http://127.0.0.1:3000 即可查看服务,外部主机无法连接,保障开发安全

3 ) 多网卡与服务器环境下的命名规范
在企业级服务器中,常存在多块网卡:

  • eth0, eth1, eth2 分别表示第一、第二、第三块以太网卡
  • wlan1, wlan2 表示额外无线模块(较少见)

此类设计可用于:

  • 流量隔离(管理网口 vs 数据网口)
  • 冗余链路(bonding 技术提升可靠性)
  • VLAN 划分与路由控制
接口名称类型功能说明
eth0有线网卡Ethernet 缩写,对应 RJ-45 网线连接,如 eth1, eth2 表示第二、第三块网卡
wlan0无线网卡Wireless Local Area Network 缩写,代表第一块 Wi-Fi 网卡;多卡则依次为 wlan1, wlan2
lo回环接口Loopback 接口,IP 为 127.0.0.1,用于本机服务自测

whois 命令:挖掘域名背后的注册信息

每个合法注册的域名必须登记所有者、联系方式等公开信息,可通过 whois 命令查询

1 ) 安装与使用方法

若系统未预装 whois,可通过包管理器安装:

# CentOS/RHEL
sudo yum install whois -y# Ubuntu/Debian
sudo apt-get install whois -y

查询任意域名信息:

whois github.com

输出示例片段:

Domain Name: GITHUB.COM
Registry Domain ID: 2142114_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.markmonitor.com 
Created On: 2007-10-09T04:00:00Z 
Expires On: 2025-10-09T04:00:00Z
Registrant Name: GitHub, Inc.
Registrant Organization: GitHub, Inc.
Registrant Country: US
Name Server: NS-1707.AWSDNS-21.CO.UK

输出内容包括:

  • 注册时间(Creation Date)
  • 过期时间(Expiration Date)
  • 注册商(Registrar):MarkMonitor Inc.
  • 所有者组织:GitHub, Inc.
  • DNS 服务器列表:ns-1776.awsdns-31.co.uk 等(表明托管于 AWS)
  • 所属组织与联系邮箱(部分隐私保护域名会隐藏)
  • 此信息可用于安全审计、反钓鱼分析、溯源攻击源等场景

安全意义:
管理员可通过 whois 快速识别恶意域名来源,辅助网络安全事件响应

此信息可用于安全审计、溯源攻击来源或识别钓鱼网站
提示:部分域名启用了隐私保护(如 Domains By Proxy),真实信息会被隐藏

防火墙与网络监控的重要性:系统管理员必备技能

尽管 Linux 本身具备较高安全性(无需杀毒软件即可稳定运行),但在开放网络环境中仍面临风险。

1 ) 黑客攻击与后台通信威胁

  • 某些程序可能在后台悄悄上传用户数据
  • 恶意程序可能在后台偷偷上传数据或建立远程控制通道
  • 必须掌握以下技能:
    • 监控哪些进程正在使用网络
    • 查看其使用的端口号和服务类型
    • 判断是否为授权通信
    • 不受控的服务暴露导致信息泄露

2 ) 防火墙的核心功能

  • 防火墙(Firewall)是控制系统进出流量的安全屏障
  • 过滤进出流量:阻止未经授权的连接尝试
  • 限制端口暴露:仅开放必要端口(如 HTTP 的 80,HTTPS 的 443)
  • 记录可疑行为:配合日志分析发现异常连接
  • 应用于:
    • 家用电脑:防止未知软件外联
    • 云服务器:封锁未开放端口,抵御扫描攻击
    • 系统管理员必备技能之一
  • 系统管理员职责强调:
    • 每一位 System Administrator 都必须掌握防火墙配置,无论是在家用 PC 还是云服务器环境
  • 后续再看 iptablesufwfirewalld 等工具的配置实践

结合 NestJS 的实际防护代码示例


1 )方案1

以下是一个完整的 NestJS 应用模块,用于执行主机名解析、WHOIS 查询和接口信息采集,体现自动化网络监控能力

功能清单:

  • 解析域名 → IP(DNS Lookup)
  • 查询 WHOIS 信息
  • 获取本地网络接口详情(调用 shell 命令)

安装依赖

npm install --save @nest-modules/mailer util child_process
npm install --save-dev @types/node 

network.service.ts

// src/network/network.service.ts
import { Injectable } from '@nestjs/common';
import * as dns from 'dns';
import * as childProcess from 'child_process';
import { promisify } from 'util';const exec = promisify(childProcess.exec);@Injectable()
export class NetworkService {/* 解析域名为主 IP 地址 (A 记录)*/async resolveHostname(hostname: string): Promise<string[]> {try {const addresses = await promisify(dns.resolve4)(hostname);return addresses;} catch (error) {throw new Error(`Failed to resolve ${hostname}: ${error.message}`);}}/* 执行 whois 查询*/async queryWhois(domain: string): Promise<string> {try {const { stdout } = await exec(`whois ${domain}`);return stdout;} catch (error) {throw new Error(`Whois query failed for ${domain}: ${error.stderr || error.message}`);}}/* 获取本地网络接口信息 (调用 ifconfig)*/async getNetworkInterfaces(): Promise<string> {try {const { stdout } = await exec('ifconfig');return stdout;} catch (error) {throw new Error(`Failed to run ifconfig: ${error.message}`);}}/* 获取回环地址信息*/getLoopbackAddress(): Record<string, string> {return {ipv4: '127.0.0.1',ipv6: '::1',description: 'Local loopback interface for internal communication',};}/* 自定义 hosts 映射模拟(可用于内部路由)*/private readonly customHosts: Record<string, string> = {'father-laptop': '192.168.0.5','smart-tv': '192.168.0.6','github.com': '13.250.177.223',};lookupHost(host: string): string | null {return this.customHosts[host] || null;}
}

network.controller.ts

// src/network/network.controller.ts
import { Controller, Get, Query, NotFoundException } from '@nestjs/common';
import { NetworkService } from './network.service';@Controller('network')
export class NetworkController {constructor(private readonly networkService: NetworkService) {}@Get('resolve')async resolve(@Query('host') hostname: string) {if (!hostname) {throw new Error('Query parameter "host" is required');}const ips = await this.networkService.resolveHostname(hostname);return { hostname, ips };}@Get('whois')async whois(@Query('domain') domain: string) {if (!domain) {throw new Error('Query parameter "domain" is required');}const data = await this.networkService.queryWhois(domain);return { domain, whois: data.split('\n').slice(0, 20) }; // 返回前20行}@Get('interfaces')async interfaces() {const raw = await this.networkService.getNetworkInterfaces();return { output: raw };}@Get('loopback')loopback() {return this.networkService.getLoopbackAddress();}@Get('host')hostLookup(@Query('name') name: string) {const ip = this.networkService.lookupHost(name);if (!ip) {throw new NotFoundException(`No mapping found for host: ${name}`);}return { name, ip };}
}

module 注册

// src/network/network.module.ts
import { Module } from '@nestjs/common';
import { NetworkController } from './network.controller';
import { NetworkService } from './network.service';@Module({controllers: [NetworkController],providers: [NetworkService],
})
export class NetworkModule {}

使用示例(HTTP 请求)

GET /network/resolve?host=github.com
GET /network/whois?domain=github.com
GET /network/interfaces 
GET /network/loopback
GET /network/host?name=father-laptop

2 )方案2

在构建 Node.js 后端应用时,应主动控制监听地址与端口,并结合系统级防火墙策略

NestJS 中的安全启动配置(TypeScript)

// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';async function bootstrap() {const app = await NestFactory.create(AppModule);// ❗重要:避免使用 0.0.0.0 暴露公网 // 开发阶段:仅限本地访问await app.listen(3000, '127.0.0.1');// 生产部署:绑定内网地址 + 配合 nginx 反向代理 // await app.listen(3000, '192.168.1.100');
}
bootstrap();

配套 iptables 防火墙规则(推荐 ufw 替代)

允许本地回环通信
sudo iptables -A INPUT -i lo -j ACCEPT允许已建立的连接返回 
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT仅允许特定端口对外开放(如 SSH 和 Web)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT默认拒绝其他所有入站请求
sudo iptables -P INPUT DROP 

2 )方案2

基于 NestJS 的本地服务监听与 hosts 映射验证
以下是一个完整的 NestJS 示例项目,演示如何结合 /etc/hosts 实现域名本地映射并启动服务

2.1. 初始化项目

npm i -g @nestjs/cli
nest new local-host-demo
cd local-host-demo

2.2. 修改 main.ts 设置监听地址

// src/main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';async function bootstrap() {const app = await NestFactory.create(AppModule);// 绑定到回环地址,仅本地可访问await app.listen(8080, '127.0.0.1', () => {console.log('Server running at http://127.0.0.1:8080');console.log('Try accessing http://mydevsite.local:8080 after hosts setup');});
}
bootstrap();

2.3. 添加自定义路由

// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';@Controller()
export class AppController {@Get()home() {return {message: 'Welcome to My Dev Site!',timestamp: new Date().toISOString(),environment: process.env.NODE_ENV || 'development'};}
}

2.4. 配置本地 hosts 映射
编辑 /etc/hosts

127.0.0.1    mydevsite.local

2.5. 启动服务并验证

npm run start

打开浏览器访问:

  • http://127.0.0.1:8080 —— 正常显示
  • http://mydevsite.local:8080 —— 成功解析,内容一致

成功实现“域名”本地开发映射,无需真实 DNS 配置

总结与关键技术凝练


核心主题关键要点
IP 地址体系IPv4 已枯竭,IPv6 成未来主流;128位地址支持海量设备接入
主机名解析DNS 提供全局解析,/etc/hosts 支持本地覆盖,适用于开发与应急
网络接口管理eth0/wlan0/lo 分别对应有线、无线与回环接口,ifconfig 是基础诊断工具
域名信息查询whois 提供注册信息,助力安全审计与溯源
网络安全实践防火墙 + 最小权限原则 + 回环绑定 = 构建纵深防御体系
FQDN 结构hostname.domainname,如 www.github.com
DNS 解析流程浏览器 → 本地缓存 → DNS 服务器 → 返回 IP
/etc/hosts 作用本地优先级最高的静态解析文件,绕过 DNS
ifconfig 输出解读ethx(有线)、wlanx(无线)、lo(回环)
回环接口用途本地服务测试、避免暴露外部网络
whois 数据价值获取域名归属、判断可信度、辅助安全调查

构建安全可控的网络认知体系

理解 IP 地址结构、主机名解析机制、网络接口功能、域名信息查询手段,不仅是 Linux 使用者的基本素养,更是迈向系统管理、网络安全、DevOps 工程师的关键一步。后续应进一步学习:

  • 使用 ssnetstat 查看端口占用;
  • 利用 tcpdump 抓包分析通信内容;
  • 配置 ufwfirewalld 实现访问控制;
  • 深入 DNS 协议工作原理(递归查询、权威服务器、TTL 缓存);

唯有全面掌握底层机制,方能在复杂网络世界中做到 看得清、控得住、防得牢

本文系统梳理了 Linux 网络核心知识体系,涵盖:

  • IP 地址演进逻辑:从 IPv4 到 IPv6 的技术驱动与地址空间扩展
  • FQDN 与 DNS 解析机制:理解主机名如何映射为网络可达地址
  • /etc/hosts 文件作用:实现本地静态解析,提升访问效率与容灾能力
  • whois 工具应用:获取域名背后的真实注册信息,辅助安全分析
  • ifconfig 接口解读:掌握 eth0lowlan0 等关键网络设备含义
  • 实战代码集成:通过 NestJS 实现网络探测模块,具备生产级参考价值

重点强调:网络安全始于基础认知。无论是个人开发环境还是企业服务器运维,掌握 IP、DNS、防火墙与接口管理,是构建健壮系统的基石。后续章节将进一步深入 netstat/ss 命令分析端口占用 与 iptables/firewalld 防火墙配置

http://www.dtcms.com/a/525506.html

相关文章:

  • ant design vue使用date组件,判断要清空却失效的问题
  • 百度seo搜索百度推广优化技巧
  • 手机版网站建设方案福建建设工程信息网官网查询
  • 终结工艺数据分散管理:金仓数据库平替MongoDB,实现参数、配方、流程一体贯通
  • SAP 长文本弹窗函数 及控件使用
  • 常规同轴光源在工业视觉检测上的应用
  • 建设国家游戏网站免费创建音乐网站
  • 网站源码怎么做网站热点新闻事件及观点简单版
  • windows服务器mstsc远程桌面连接输入用户名后连接时自带拼接了本机计算机名称导致用户名一直错误,无法远程,使用.\用户名格式解决
  • 【Diffusion Model】奠基之作DDPM详解
  • 4a级景区网站建设方寸网站建设
  • 【图像超分】论文复现:轻量化超分 | SPAN的Pytorch源码复现,跑通源码进行训练、测试
  • 小红书小组件开发 最早踩坑版
  • 厚街外贸网站建设公司wordpress.org hosting
  • 现在网站用什么语言做最好WordPress整站下载器
  • 用最少数量的箭引爆气球--leetcode
  • Linux中网络初始化函数sock_init的实现
  • 数据结构——KMP算法
  • 湖北微网站建设报价我的手机网站
  • Spring集成WebSocket
  • MinerU系列最新迭代版本上线,专为高精度、高效率的文档解析任务设计;清华、字节联合推出HuMo,实现三模态协同生成人物视频
  • 什么是企业营销型网站seo公司优化排名
  • 洛阳有做网站开发的吗wordpress重构
  • 呼和浩特网站建设电话西安网页设计培训
  • uniapp开发小程序,实现开通会员卡页面
  • 微信小程序开发案例 | 简易登录小程序
  • uniapp开发小程序,Canvas实现海报生成邀请码,邀请好友功能
  • 江苏省建设斤网站宁波seo关键词
  • 第 03 天:Linux 文件夹结构与文件类型
  • 网站页面安全监测建设方案成为软件工程师的条件