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

Linux小课堂: 网络接口与连接监控命令详解

网络接口配置命令 ifconfig


1 ) 网络接口识别

  • 有线连接标识:eth0(旧版)或 enp0s3(新版)表示有线网卡。在输出中,RX packets(接收包)和 TX packets(发送包)的数量为非零值(如 RX: 4853, TX: 4821),表明采用有线联网
    • 无线连接标识:wlan0 表示无线网卡。若其 RX/TX 值均为零,表明未使用无线连接
    • 本地回环:lo 接口的 RX/TX 包数(如 148)表示系统内部通信
  • 无线网卡标识为wl*(如wlan0
    • 参考:Predictable Network Interface Names

2 )新版网络接口命名规则

  • 原因:新版 Linux 使用 systemd 替代 init.d,导致接口命名改变
  • 示例:enp0s3 中:
    • en 表示以太网卡(Ethernet);
    • p0s3 表示 PCI 接口物理位置(总线号 0,插槽号 3
    • 命名规范:
      前缀含义示例
      en以太网enp0s3
      wl无线网wlp2s0
    • 自定义名称:可通过配置将 enp0s3 改为 eth0(不推荐)
  • 网络接口命名规则:
    • 在旧版 Linux 系统中,有线网卡名称为 eth0;新版系统(如 CentOS)改用 enp0s3
    • 若需恢复旧版命名(如 eth0),可修改配置文件,但不推荐

3 ) 虚拟机网络接口的特殊性

  • 虚拟接口 virbr0:由 libvirtd 服务生成,用于 NAT 模式,使虚拟机通过宿主机访问外部网络
    • 桥接模式:服务器中若使用桥接网卡(非 NAT),则无 virbr0 接口
  • 删除方法:通过特定步骤移除 virbr0(详见相关文档)

4 ) 关键参数解析

  • 包数: RX packets(接收包数)与 TX packets(发送包数),如 RX packets: 4853 表示接收 4853 个数据包
  • 流量统计:RX bytes: 10991 (10.0 MB) 表示接收流量为 10.0 MB
  • IP 地址:inet 后接 IPv4 地址(如 192.168.1.100),inet6 后接 IPv6 地址
  • 子网掩码:netmask 表示子网掩码,broadcast 表示广播地址
  • MAC 地址:ether 后接物理地址(如 08:00:27:3a:4c:5b
  • 流量统计:RX bytes(接收流量)与 TX bytes(发送流量),例如 10.0 MB 接收、182.1 KB 发送
  • lo 为本地回环接口,virbr0 为虚拟接口(由 NAT 模式生成,桥接模式不显示)

5 )接口配置操作

  • 激活/关闭接口:需 root 权限,格式为 ifconfig <接口名> <状态>
    # 关闭有线接口  
    sudo ifconfig enp0s3 down  
    # 重新激活  
    sudo ifconfig enp0s3 up  
    
  • 手动设置 IP(示例):
    sudo ifconfig enp0s3 192.168.10.15 netmask 255.255.255.0 broadcast 192.168.10.255  
    
  • 注意:错误配置可能导致网络故障,需网络知识支持

6 )ifconfig 替代工具:ip addr

  • 新版 Linux 默认安装 iproute2 包,提供 ip addr 命令,功能类似 ifconfig
    ip addr show  # 显示接口信息  
    
  • 新旧工具对比:
    net-tools 命令iproute2 等效命令
    ifconfigip addr
    routeip route
    netstatss(连接统计)

7 )手动配置 IP 地址(示例):

sudo ifconfig enp0s3 192.168.10.15 netmask 255.255.255.0 broadcast 192.168.10.255  

注意:错误配置可能导致网络故障,需网络知识支持

命令对比:

  • ifconfig 属于 net-tools 包(旧版),ip addr 属于 iproute2 包(新版)
  • 两者功能相似,但 iproute2 是未来趋势

8 )ip linkip addr

两者均为 Linux 网络管理核心命令,前者侧重链路层(硬件/状态),后者专注 IP 地址管理

命令功能概述
ip linkip addr 均属于 iproute2 工具集,用于配置网络接口。ip link 主要操作物理/虚拟网卡的状态与属性,如启用、禁用或修改 MAC 地址;ip addr 则负责 IP 地址的添加、删除与查看[2][3][4]。

核心用法对比

功能场景ip link 常用命令ip addr 常用命令
查看信息ip link show(所有网卡状态)ip addr show(所有网卡 IP 信息)
ip link show eth0(指定网卡详情)ip addr show eth0(指定网卡 IP)
修改状态ip link set eth0 up(启用网卡)-
ip link set eth0 down(禁用网卡)-
配置硬件属性ip link set eth0 address 00:11:22:33:44:55(修改 MAC)-
管理 IP 地址-ip addr add 192.168.1.100/24 dev eth0(添加 IP)
-ip addr del 192.168.1.100/24 dev eth0(删除 IP)
清空 IP 地址-ip addr flush dev eth0(删除所有 IP)

临时配置需注意:命令行修改均为临时生效,重启 network 服务后失效;永久配置需编辑网卡文件(如 /etc/sysconfig/network-scripts/ifcfg-eth0

关键区别与使用建议

  • ip link 核心:链路层操作,如检查网线连接(LOWER_UP 状态)、修改 MTU 或 MAC 地址,适合硬件级调试
  • ip addr 核心:网络层配置,重点管理 IP 地址与子网掩码,常用于临时测试多 IP 场景(如高可用集群)
  • 替代关系:ip linkip addr 逐步取代传统 ifconfig,功能更全面(如 ip addr 可显示 down 状态的网卡)

网络连接统计命令 netstat


命令归属与包管理

  • netstat命令属于net-tools软件包,用于统计网络信息。该包包含基础网络工具(如ifconfigroute等)
  • 新一代网络工具包iproute2(含ipss命令)已逐步替代net-tools

通过包管理器可验证归属:

查询ifconfig所属包
which ifconfig             # 输出路径:/usr/sbin/ifconfig 
rpm -qf /usr/sbin/ifconfig # 显示包名:net-tools 查询ip命令所属包 
which ip                   # 输出路径:/sbin/ip 
rpm -qf /sbin/ip           # 显示包名:iproute2 

常用参数与输出:

  • -i:接口统计信息(如 netstat -i):
    • RX-OK/TX-OK:成功接收/发送的包数
    • RX-ERR/TX-ERR:错误包数
    • RX-DRP/TX-DRP:丢弃包数(DRP 为 drop 缩写)。
    • RX-OVR/TX-OVR:过速丢失包数(OVR 为 overrun 缩写)
  • 连接状态分析:
    netstat -ta  # 仅显示 TCP 连接  
    netstat -ua  # 仅显示 UDP 连接  
    
  • -ta:列出所有 TCP 连接(netstat -ta)。
  • -ua:列出所有 UDP 连接(netstat -ua)。
  • -n:以数字形式显示端口(如 443 替代 https
  • -lt:仅显示 LISTEN 状态的连接(netstat -lt
  • -s:总结性统计(如协议级流量数据)

连接状态与端口:

  • 状态含义:

    • ESTABLISHED:连接已建立。
    • TIME_WAIT:等待封包处理。
    • LISTEN:监听传入连接。
    • CLOSE_WAIT:远程终止连接。
  • 冒号后数字(如 :443)表示端口,常用端口及作用:

    端口协议用途
    80HTTP网页访问
    443HTTPS加密网页访问
    22SSH安全远程登录
    21FTP文件传输
    110POP3邮件接收
  • 数字显示端口:netstat -tun 强制以数字格式输出端口号

  • 过滤与统计命令

    • 监听端口:netstat -lt 列出所有 LISTEN 状态的连接
    • 汇总统计:netstat -s 显示协议级流量摘要(TCP/UDP/IP)
  • netstat 替代工具:ss

    • ss 命令(属 iproute2 包)功能类似 netstat,语法更高效:
      ss -ta  # 显示所有 TCP 连接  
      ss -s   # 输出统计摘要  
      

iproute2 替代命令 ss

netstat 对比:

  • ss 属于 iproute2 包,功能类似 netstat,但性能更优。
  • 示例:ss -t 显示 TCP 连接,输出格式与 netstat -ta 相似。
  • 命令映射关系:
    • netstat -iip -s link(接口统计)。
    • netstat -tass -t(TCP 连接)。

接口操作(iproute2 语法):

关闭接口  
ip link set enp0s3 down  激活接口  
ip link set enp0s3 up  

NestJS 实现网络信息监控(TypeScript 代码)


1 ) 方案1

以下示例通过 NestJS 服务执行 ifconfignetstat 命令,解析并返回结构化数据。

安装依赖:

npm install @nestjs/common @nestjs/core child_process  

服务代码 (network.service.ts):

import { Injectable } from '@nestjs/common';  
import { exec } from 'child_process';  
import { promisify } from 'util';  const execAsync = promisify(exec);  @Injectable()  
export class NetworkService {  // 解析 ifconfig 输出  async getIfconfig(): Promise<any> {  try {  const { stdout } = await execAsync('ifconfig');  const interfaces = stdout.split('\n\n').filter(Boolean);  const result = {};  interfaces.forEach(intf => {  const nameMatch = intf.match(/^(\w+):/);  if (!nameMatch) return;  const name = nameMatch[1];  const inetMatch = intf.match(/inet (\d+\.\d+\.\d+\.\d+)/);  const netmaskMatch = intf.match(/netmask (\d+\.\d+\.\d+\.\d+)/);  const macMatch = intf.match(/ether ([\da-f:]+)/i);  const rxMatch = intf.match(/RX packets (\d+).*?bytes (\d+)/);  const txMatch = intf.match(/TX packets (\d+).*?bytes (\d+)/);  result[name] = {  ipv4: inetMatch ? inetMatch[1] : null,  netmask: netmaskMatch ? netmaskMatch[1] : null,  mac: macMatch ? macMatch[1] : null,  rx: rxMatch ? { packets: parseInt(rxMatch[1]), bytes: parseInt(rxMatch[2]) } : null,  tx: txMatch ? { packets: parseInt(txMatch[1]), bytes: parseInt(txMatch[2]) } : null,  };  });  return result;  } catch (error) {  throw new Error(`Failed to get ifconfig: ${error.message}`);  }  }  // 解析 netstat 输出  async getNetstat(options: { type?: 'tcp' | 'udp' } = {}): Promise<any[]> {  try {  const cmd = options.type ? `netstat -t${options.type === 'udp' ? 'u' : ''}a` : 'netstat -a';  const { stdout } = await execAsync(cmd);  const lines = stdout.split('\n').slice(2); // 跳过表头  const connections = [];  lines.forEach(line => {  const columns = line.trim().split(/\s+/);  if (columns.length < 6) return;  const [proto, recvQ, sendQ, localAddr, foreignAddr, state] = columns;  connections.push({  protocol: proto,  localAddress: localAddr,  foreignAddress: foreignAddr,  state: state || 'N/A',  });  });  return connections;  } catch (error) {  throw new Error(`Failed to get netstat: ${error.message}`);  }  }  
}  

控制器代码 (network.controller.ts):

import { Controller, Get } from '@nestjs/common';  
import { NetworkService } from './network.service';  @Controller('network')  
export class NetworkController {  constructor(private readonly networkService: NetworkService) {}  @Get('interfaces')  async getInterfaces() {  return this.networkService.getIfconfig();  }  @Get('connections')  async getConnections() {  return this.networkService.getNetstat({ type: 'tcp' });  }  
}  

模块注册 (app.module.ts):

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

说明:

  • 服务通过 child_process 执行系统命令,解析后返回 JSON 格式的网络信息。
  • 接口:GET /network/interfaces 返回网卡详情;GET /network/connections 返回 TCP 连接。
  • 安全提示:生产环境需添加权限校验,避免命令注入风险。

核心总结


1 ) IP 与主机名:

  • 互联网设备通过 IP 地址(如 72.208.169.35)标识,主机名(如 github.com)便于记忆
  • host 命令实现 IP 与主机名互解析

2 ) 接口监控:

  • ifconfig 管理网络接口(实体/虚拟),ip addr 为新一代替代方案

3 ) 连接分析:

  • netstat 统计活动连接(TCP/UDP),ss 提供更高效实现

4 ) 端口作用:

  • 端口是通信门户(如 80=HTTP、22=SSH),物理端口(如 RJ45)与虚拟端口并存

细节总结


1 ) 网络接口管理:

  • 命名逻辑:新版接口名(如 enp0s3)编码硬件位置,避免歧义
  • 虚拟接口:virbr0 是实现虚拟机 NAT 网络的核心组件
  • 关键操作:接口启停需 root 权限,IP 配置影响网络可达性

2 ) 连接与端口监控:

  • 状态机:TCP 连接状态(如 ESTABLISHED/TIME_WAIT)反映通信阶段
  • 端口协议:端口号与服务的绑定(如 443→HTTPS)是网络层寻址基础

3 ) 工具演进:

  • net-tools vs iproute2:后者更现代,支持更多功能(如 ss 替代 netstat
  • 命令等价:ifconfigip link/addrnetstatss

4 ) 代码补充说明:本文主要涉及系统命令,若需在 NestJS 中操作网络接口(如获取 IP),可使用 Node.js 的 os 模块:

import { networkInterfaces } from 'os';  const nets = networkInterfaces();  
const enp0s3 = nets['enp0s3']?.find(info => info.family === 'IPv4');  
console.log('IP Address:', enp0s3?.address);  
http://www.dtcms.com/a/532705.html

相关文章:

  • 做网站九州科技汕头网站建设浩森宇特
  • GitHub等平台形成的开源文化正在重塑可以调
  • 流批了,pdf批量转excel
  • GitHub等平台形成的开源文化正在重塑家庭日快
  • 怎么在搜索引擎做网站登记metropro wordpress
  • Appium 手机自动化控制教程
  • 节流(throttle) 是一种优化高频触发事件的技术
  • 免费空间域名可以做淘宝客网站推广吗优秀网站开发公司
  • 决策树(ID3、C4.5与CART)——从信息增益、信息增益率到基尼系数
  • 图神经网络在观点动力学中的应用
  • SQL学习之常用的数据库命令和基础查询
  • 做爰网站1000部扬中营销网站建设
  • 优化网页性能指标:提升用户体验的关键
  • 淮北矿业工程建设公司网站wordpress如何做拼团
  • rust更新后编译的exe文件执行报错
  • 申请网站建设费人们常用的网页设计工具是
  • 琵琶行论坛GBA、MD、SFC、FC、PS1、PS2 HACK修改版中文游戏全集下载
  • 【AI大模型】Function Calling接口介绍
  • 公司做英文网站wordpress怎么解压
  • 从网站下载壁纸做海报涉及网站标签化
  • 诚信档案建设网站首页推广目标怎么写
  • UE5 蓝图-21:主 mainUI 界面蓝图,颜色按钮蓝图 Ul_colorsUl 的内容,尺寸,事件分发器还有赋予按钮形状的环状材质
  • 安卓开发玩转JetPack之Room的使用
  • e龙岩网站网站建设外包公司
  • 做的图怎么上传到网站google play应用商店
  • 图书馆网站建设拖拽网站开发
  • CSS ::before 和 ::after 伪元素详解
  • 网站gif素材wap音乐网站源码
  • Gorm(九)嵌套预加载、带条件预加载(防止 N+1)
  • 提供网站建设公司网络销售网络推广方案