ifconfig

ifconfig

ifconfig是linux中用於顯示或配置網路設備(網路接口卡)的命令,英文全稱是network interfaces configuring。配置網卡IP位址語法例:ifconfig eth0 192.168.0.1 netmask 255.255.255.0

基本介紹

  • 中文名:網路接口配置
  • 外文名:ifconfig
  • 全稱:network interfaces configuring
  • 來源Linux命令
  • 用途:顯示或配置網路設備
系統命令,語法,補充說明,參數,網卡命令,配置網卡,源碼分析,

系統命令

Linux命令:ifconfig

語法

ifconfig [網路設備][down up -allmulti -arp -promisc][add<地址>][del<地址>][<硬體地址>] [media<網路媒介類型>][mem_start<記憶體地址>][metric<數目>][mtu<位元組>][netmask<子網掩碼>][tunnel<地址>][-broadcast<地址>] [-pointopoint<地址>]

補充說明

補充說明:ifconfig可設定網路設備的狀態,或是顯示當前的設定。

參數

參 數
[網路設備] 網路設備的名稱。
down 關閉指定的網路設備。
up 啟動指定的網路設備。
-arp 打開或關閉指定接口上使用的ARP協定。前面加上一個負號用於關閉該選項。
-allmuti 關閉或啟動指定接口的無區別模式。前面加上一個負號用於關閉該選項。
-promisc 關閉或啟動指定網路設備的promiscuous模式。前面加上一個負號用於關閉該選項。
add<地址> 設定網路設備IPv6的IP位址。
del<地址> 刪除網路設備IPv6的IP位址。
media<網路媒介類型> 設定網路設備的媒介類型。
mem_start<記憶體地址> 設定網路設備在主記憶體所占用的起始地址。
metric<數目> 指定在計算數據包的轉送次數時,所要加上的數目。
mtu<位元組> 設定網路設備的MTU。
netmask<子網掩碼> 設定網路設備的子網掩碼。
tunnel<地址> 建立IPv4與IPv6之間的隧道通信地址。
-broadcast<地址> 將要送往指定地址的數據包當成廣播數據包來處理。
-pointopoint<地址> 與指定地址的網路設備建立直接連線,此模式具有保密功能

網卡命令

無論是Linux 自動安裝還是我們手工安裝,Linux 都會向你詢問有關網路的問題並配置相關的軟體。這個用於配置網卡的基本命令就是ifconfig。
在執行ifconfig 命令後,系統將在核心表中設定必要的參數,這樣Linux 就知道如何與網路上的網卡通信。ifconfig 命令有以下兩種格式:
※ifconfig [interface]
※ifconfig interface [aftype] option | address …
ifconfig 的第一種格式(或使用不帶任何參數的ifconfig 命令)可以用來查看當前系統的網路配置情況。
在剛剛安裝完系統之後,實際上是在沒有網卡或者網路連線的情況下使用Linux,但通過ifconfig 可以使用迴繞方式工作,使計算機認為自己工作在網路上。
下面我們運行一下ifconfig 命令,不帶參數的ifconfig 命令可以顯示當前啟動的網路接口,其輸出結果為:
[root@machine1 /sbin]#ifconfig
eth0 Link encap:Ethernet HWaddr 52:54:AB:DD:6F:61
inet addr:210.34.6.89 Bcast:210.34.6.127 Mask:255.255.255.128
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:46299 errors:0 dropped:0 overruns:0 frame:189
TX packets:3057 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:5 Base address:0xece0
lo Link encap:Local Loopback
inet addr:127.0.0.1Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:44 errors:0 dropped:0 overruns:0 frame:0
TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
其中以eth0 為首的部分是本機的乙太網卡配置參數,這裡顯示了網卡的設備名/dev/eth0 和硬體的MAC 地址52:54:AB:DD:6F:61,MAC 地址是生產廠家定的,每個網卡擁有的一個地址。
不過我們可以手工改動網卡的MAC 地址,只要我們在/etc/rc.d/init.d/中的network 中加入:
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
Jiania 解說註:
eth0,eth1,eth2,代表網卡一,網卡二,網卡三
hw 代表hardware 硬體意思
ether 代表ethernet乙太網的意思
然後重啟,此時再用ifconfig 命令查看一下,我們就會發現網卡的MAC 地址已經變成xx:xx:xx:xx:xx:xx了。

配置網卡

配置網卡的IP位址
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
在eth0上配置上192.168.0.1 的IP位址及24位掩碼。若想再在eth0上在配置一個192.168.1.1/24 的IP位址用下面的命令:
ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0
這時再用ifconifg命令查看,就可以看到兩個網卡的信息了,分別為:eth0和eth0:0。若還想再增加IP,那網卡的命名就接著是:eth0:1、eth0:2……想要幾個就填幾個。
配置網卡的硬體地址
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx就將網卡的硬體地址更改了,此時你就可以騙過區域網路內的IP位址綁定了。
將網卡禁用
ifconfig eth0 down
將網卡啟用
ifconfig eth0 up
ifconfig 命令的功能很強大,還可以設定網卡的MTU,混雜模式等。

源碼分析

int main(int argc, char **argv)
{
……
argc--;
argv++;
/*首先判斷以 - 開頭的各種參數,如-a,-s等等*/
while (argc && *argv[0] == '-') {
……
}
打開核心支持的所有協定的套接字,主要是一個循環調用socket的過程
if ((skfd = sockets_open(0)) < 0) {
perror("socket");
exit(1);
}
/*可能是顯示全部網卡的信息,或者是顯示單一指定的網卡*/
if (argc == 0) {
int err = if_print((char *) NULL);
(void) close(skfd);
exit(err < 0);
}
/* No. Fetch the interface name. */
spp = argv;
safe_strncpy(ifr.ifr_name, *spp++, IFNAMSIZ);
if (*spp == (char *) NULL) {
int err = if_print(ifr.ifr_name);
(void) close(skfd);
exit(err < 0);
}
/*接著判斷下一個參數,有可能是協定簇名,或者是一個選項,如果是一個選項,則協定簇默認為ipv4*/
if ((ap = get_aftype(*spp)) != NULL)
spp++; /* it was a AF name */
else
ap = get_aftype(DFLT_AF);
if (ap) {
addr_family = ap->af;
skfd = ap->fd;
}
/*做一個循環,處理餘下的參數,有兩種情況
1、如果是開關參數,則調用set_flag或clr_flag函式處理
2、如果是功能參數,直接調用ioctl 處理之*/
while (*spp != (char *) NULL) {
}
/*餘下的主要是添加IP位址及餘下的下理,IP位址的添加先利用switch判斷協定簇,然後調用ioctl 處理之……*/
switch (ap->af) {
……
r = ioctl(fd, SIOCSIFADDR, &ifr);
……
}

相關詞條

熱門詞條

聯絡我們