網絡接口配置命令 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 等效命令

ifconfig

ip addr

route

ip route

netstat

ss(連接統計)

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)表示端口,常用端口及作用:

端口

協議

用途

80

HTTP

網頁訪問

443

HTTPS

加密網頁訪問

22

SSH

安全遠程登錄

21

FTP

文件傳輸

110

POP3

郵件接收

  • 數字顯示端口: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);