1. 程式人生 > >一句話腳本系列之獲取eth0網絡卡的IP地址(或MAC地址)

一句話腳本系列之獲取eth0網絡卡的IP地址(或MAC地址)

引言

使用場景:

我使用的Linux伺服器上有多個網絡卡,有時候就需要在指令碼中使用到指定網絡卡的IP地址或MAC地址,那麼這個時候就有兩種做法,一是預先讀取網絡卡的IP地址或MAC地址,然後寫入到指令碼中;另外一種方法就是通過shell命令實時獲取指定網絡卡上的當前IP地址或MAC地址。

一般用法:
  1. 使用ifconfig eth0讀取網絡卡資訊

  2. 手動將IP地址或MAC地址拷貝出來,並填入到指令碼中的對應變數中

一句話指令碼用法:

ifconfig eth0 | grep "inet addr:" | awk '{print $2}' | cut -c 6-  (獲取eth0網絡卡的IP地址)
或
ifconfig eth0 | grep "HWaddr" | awk '{print $5}'  (獲取eth0網絡卡的MAC地址)
上面的指令碼分解步驟是:
  1. 獲取eth0網絡卡的資訊
  2. 過濾出IP地址的行或MAC地址的行
  3. 使用awk輸出指定欄位,對於MAC地址,第5個欄位就是MAC;而對於IP地址,還需要對第2個欄位擷取第6個字元之後的內容

ifconfig命令部分說明

先看一下ifconfig的man手冊中的描述:

       Ifconfig  is  used  to  configure  the  kernel-resident network interfaces.  
       If  no  arguments  are  given,  ifconfig  displays the status of the currently active interfaces.  If a single
       interface argument is given, it displays the status of the given interface only; if a single  -a  argument  is
       given, it displays the status of all interfaces, even those that are down. 

ifconfig命令的主要作用是進行網絡卡配置,但是如果沒有給定引數或者只是給定了網絡卡名稱這一個引數,則就會顯示網絡卡的狀態資訊。

因此,在這裡,我們通過引數eth0來指定輸出該網絡卡的資訊

grep命令部分說明

我們先看一下ifconfig的輸出格式:

eth0      Link encap:Ethernet  HWaddr 08:00:27:f6:18:8e  
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fef6:188e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12575 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3429 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1931585 (1.9 MB)  TX bytes:465667 (465.6 KB)

其中紅色部分中包含了MAC地址資訊,藍色部分包含了IPv4的地址資訊。而如果我們指定的網絡卡不存在時,則輸出資訊如下:

[email protected]:~$ ifconfig eth1
eth1: error fetching interface information: Device not found

因此在上面的命令中,我們分別使用grep "inet addr:"和grep "HWaddr"來過濾出IPv4的地址和MAC地址所在的行,如果是該網絡卡不存在或者不處於活動狀態就過濾不到對應的行。

awk命令和cut命令部分說明

在上面的grep命令過濾出來的MAC地址和IPv4地址所在行的格式如下:

eth0      Link encap:Ethernet  HWaddr 08:00:27:f6:18:8e  
          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

因此,如果是獲取MAC地址,只需要使用awk輸出第5個欄位的值即可:awk '{print $5}';

而如果是要獲取IPv4的地址,則需要先輸出第2個欄位的值:awk '{print $2}',然後再使用cut命令,將"addr:"這5個字元去除,即從第6個字元到結尾的所有字元:cut -c 6-。

其中cut命令的-c引數以及後面的需要顯示的字元列表的表述方式的描述如下:

       -c, --characters=LIST
              select only these characters


       Use one, and only one of -b, -c or -f.  Each LIST is made up of one range, or many ranges separated by commas.
       Selected  input  is written in the same order that it is read, and is written exactly once.  Each range is one of:
       N      N'th byte, character or field, counted from 1
       N-     from N'th byte, character or field, to end of line
       N-M    from N'th to M'th (included) byte, character or field
       -M     from first to M'th (included) byte, character or field

我們這裡是按照字元操作的,所以使用了-c引數;需要顯示的是從第6個字元到結尾的部分,所以使用了N-的模式表示LIST。

總結

本次一句話指令碼使用到了以下知識:

  1. ifconfig命令
  2. grep命令
  3. awk命令
  4. cut命令的-c引數

相關推薦

一句話系列獲取eth0IP地址(MAC地址)

引言 使用場景: 我使用的Linux伺服器上有多個網絡卡,有時候就需要在指令碼中使用到指定網絡卡的IP地址或MAC地址,那麼這個時候就有兩種做法,一是預先讀取網絡卡的IP地址或MAC地址,然後寫入到指令碼中;另外一種方法就是通過shell命令實時獲取指定網絡卡上的當前IP

linux獲取活動ip地址

1、根據ioctl機制列印當前所有網絡卡 程式碼: #include <sys/ioctl.h> #include <net/if.h> #include <netinet/in.h> #include <arpa/inet.h> #include <

delphi 獲取IP地址列表和Mac地址

1、宣告windows系統的sendarp函式 function sendarp(ipaddr: ulong; temp: dword; ulmacaddr: pointer; ulmacaddrleng: pointer): Dword; StdCall;External

socket 通過 ioctl獲取 設定 IP掩碼 本地廣播地址

參看 http://blog.chinaunix.net/uid-20692625-id-3172833.html 類別 Request 說明 資料型別 套  接  口 SIOCATMARK  SIOCSPGRP  SIOCGPGRP 是否位於帶外標

如何開發一個使用者系列(5)——指令碼三:易雲課堂下載助手

在這篇文章中,我們將一起學習指令碼 網易雲課堂下載助手 的開發。在正式開始之前,先說一下我認為開發指令碼應該遵循的兩個準則: 功能實現。當你決定要開發一個指令碼的時候,你肯定清楚你的指令碼要實現什麼功能,只有你的指令碼實現了你所描述的功能,才會有更多的人安裝使用,才會有更多的人給你好評;

Exchange 2013系列三:及先決條件準備

Windows Exchange AD 這裏僅以ExchCas01服務器舉例。打開網絡和管理中心,右鍵Manage網卡,選擇屬性;選擇IPV4,點擊屬性;輸入IP地址、子網掩碼及網關,DNS指向域控服務器,點擊確定;右鍵Heart網卡,點擊屬性;選擇IPV4,點擊屬性;因為心跳網絡只用於虛擬機之間

C#獲取IP地址

有時候不想讀取配置檔案來進行網路監聽,預設把本級所有IP地址監聽一遍,這個時候就需要獲取本級所有IP地址。 如下: string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.Get

jva 獲取機正在使用的Mac地址

package com.common; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import org.apache.l

linux 獲取eth0(指定IP地址(MAC地址)

引言 使用場景: 我使用的Linux伺服器上有多個網絡卡,有時候就需要在指令碼中使用到指定網絡卡的IP地址或MAC地址,那麼這個時候就有兩種做法,一是預先讀取網絡卡的IP地址或MAC地址,然後寫入到指令碼中;另外一種方法就是通過shell命令實時獲取指定網絡卡上的當前

獲取IP及對應的mac

#include <stdio.h> #include <stdlib.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/socket.h>

linux c/c++按規則獲取ip

linux c/c++按規則獲取網絡卡ip 輸出專案到雲或者輸出給外部客戶,會遇到伺服器多網絡卡多ip的情形,如果有多個應用都需要這個主機ip,而且多應用需要獲取相同的ip,此時可以約定一種規則來獲取相同的ip,比如: 獲得所有網絡卡名,然後對網絡卡名按從小到大排序,查詢最小

解決vmware下拷貝主機後不識別eth0

一、故障問題 搭建Hadoop叢集時,第一臺主機採用NET模式,網路手動配置模式Manual,配置如下 從vmware workstation中克隆(clone)了一個linux的虛擬機器,啟動之後發現網絡卡採用的時Auto自動分配的,不是eth0 於是重啟一下service net

獲取指定對應的IP地址

1 #include <stdio.h> 2 #include <string.h> 3 #include <sys/socket.h> 4 #include <sys/types.h> 5 #include <sys/ioctl.h>

在安卓6.0(及以上)裝置上無法獲取無線MAC地址的解決方案

在安卓6.0以下的裝置上,通過WifiManager.getConnectionInfo().getMacAddress()即可獲取WLAN實體地址, 而在6.0及以上,以此方式獲取到的MAC地址為固定值02:00:00:00:00:00,而非真實值 解決方案 WlanMacAddressGetter.

golang 獲取主機對應的ip

import "net" func Ips() (map[string]string, error) { ips := make(map[string]string) interfaces, err := net.Interfaces() if err != nil {

Kali——安裝無線

1.新增軟體源 vim /etc/apt/sources.list deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free c

linux下編譯新核心,解決無法找到eth0裝置問題,安裝eth0驅動

由於我的blktrace執行時出現問題,只能對裝置測試一次,第二次的時候就會報如下錯誤:no such file or directory google瞭解決方案,很多都說是核心版本的問題,簡單的方法解決不了啊,測試不能不做啊,所以今天只能果斷換核心版本了(不過我想說每編一次核心,都會遇到新的

ubuntu下eth0資訊不見了

  carpenter: 使用ip addr命令檢視網絡卡資訊 確定  eth0或1或2  先複製一份ifcfg-eth0的配置檔案 cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig

RHEL6 克隆eth0變成eth1的問題怎麼解決

修改/etc/udev/rules.d/70-persistent-net.rules  檔案     vi /etc/udev/rules.d/70-persistent-net.rules   開啟後會有兩行資訊如下: SUBSY

配置Linux的eth0設定IP地址以及啟動方式

// 進入網絡卡設定配置目錄 [[email protected] ~]# cd/etc/sysconfig/network-scripts/ // 選擇需要配置的網絡卡,用vi編輯器開啟 [[email protected]]#vi ifcfg-eth