ifconfig

計算機編輯的命令

ifconfig是一個計算機編輯的命令,ifconfig有兩種格式。文全稱是networkinterfacesconfiguring。配置網卡的IP地址語法例:ifconfigeth0192.168.0.1netmask255.255.255.0。

系統命令


Linux命令:ifconfig
語法
ifconfig[網路設備][downup-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]
※ifconfiginterface[aftype]option|address…
ifconfig的第一種格式(或使用不帶任何參數的ifconfig命令)可以用來查看當前系統的網路配置情況。
在剛剛安裝完系統之後,實際上是在沒有網卡或者網路連接的情況下使用Linux,但通過ifconfig可以使用迴繞方式工作,使計算機認為自己工作在網路上。
下面我們運行一下ifconfig命令,不帶參數的ifconfig命令可以顯示當前啟動的網路介面,其輸出結果為:
[root@machine1/sbin]#ifconfig
eth0Linkencap:EthernetHWaddr52:54:AB:DD:6F:61
inetaddr:210.34.6.89Bcast:210.34.6.127Mask:255.255.255.128
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:46299errors:0dropped:0overruns:0frame:189
TXpackets:3057errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:100
Interrupt:5Baseaddress:0xece0
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
UPLOOPBACKRUNNINGMTU:3924Metric:1
RXpackets:44errors:0dropped:0overruns:0frame:0
TXpackets:44errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
其中以eth0為首的部分是本機的乙太網卡配置參數,這裡顯示了網卡的設備名/dev/eth0和硬體的MAC地址52:54:AB:DD:6F:61,MAC地址是生產廠家定的,每個網卡擁有的一個地址。
可以手工改動網卡的MAC地址,只要我們在/etc/rc.d/init.d/中的network中加入:
ifconfigeth0hwetherxx:xx:xx:xx:xx:xx
Jiania解說註:
eth0,eth1,eth2,代表網卡一,網卡二,網卡三
hw代表hardware硬體意思
ether代表ethernet乙太網的意思
然後重啟,此時再用ifconfig命令查看。
配置網卡
配置網卡的IP地址
ifconfigeth0192.168.0.1netmask255.255.255.0
在eth0上配置上192.168.0.1的IP地址及24位掩碼。若想再在eth0上在配置一個192.168.1.1/24的IP地址用下面的命令:
ifconfigeth0:0192.168.1.1netmask255.255.255.0
這時再用ifconifg命令查看,就可以看到兩個網卡的信息了,分別為:eth0和eth0:0。若還想再增加IP,那網卡的命名就接著是:eth0:1、eth0:2……想要幾個就填幾個。
配置網卡的硬體地址
ifconfigeth0hwetherxx:xx:xx:xx:xx:xx就將網卡的硬體地址更改了,此時你就可以騙過區域網內的IP地址綁定了。
將網卡禁用
ifconfigeth0down
將網卡啟用
ifconfigeth0up
ifconfig命令的功能很強大,還可以設置網卡的MTU,混雜模式等。

源碼分析


intmain(intargc,char**argv)
{
……
argc--;
argv++;
while(argc&&*argv[0]=='-'){
……
}
打開內核支持的所有協議的套接字,主要是一個循環調用socket的過程
if((skfd=sockets_open(0))<0){
perror("socket");
exit(1);
}
if(argc==0){
interr=if_print((char*)NULL);
(void)close(skfd);
exit(err<0);
}
spp=argv;
safe_strncpy(ifr.ifr_name,*spp++,IFNAMSIZ);
if(*spp==(char*)NULL){
interr=if_print(ifr.ifr_name);
(void)close(skfd);
exit(err<0);
}
接著判斷下一個參數,有可能是協議匿名,或者是一個選項,如果是一個選項,則協議默認為ipv4
if((ap=get_aftype(*spp))!=NULL)
spp++;
else
ap=get_aftype(DFLT_AF);
if(ap){
addr_family=ap->af;
skfd=ap->fd;
}
while(*spp!=(char*)NULL){
}
switch(ap->af){
……
r=ioctl(fd,SIOCSIFADDR,&ifr);
……
}

函數格式


※ifconfig[interface]
※ifconfiginterface[aftype]option|address…

函數示例


現在我們運行一下ifconfig命令,不帶參數的ifconfig命令可以顯示當前啟動的網路介面,其輸出結果為:
[root@machine1/sbin]#ifconfig
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
collisions:0txqueuelen:100
Interrupt:5Baseaddress:0xece0
loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
UPLOOPBACKRUNNINGMTU:3924Metric:1
collisions:0txqueuelen:0
其中以eth0為首的部分是本機的乙太網卡配置參數,這裡顯示了網卡在下的設備名/dev/eth0和硬體的MAC地址52:54:AB:DD:6F:61,MAC地址是生產廠家定的,每個網卡擁有的唯一地址。
不過我們可以手工改動網卡的MAC地址,只要我們在/etc/rc.d/init.d/中的network中加入:
ifconfigeth0hwetherxx:xx:xx:xx:xx:xx
然後重啟,此時再用ifconfig命令查看一下,我們就會發現網卡的MAC地址已經變成xx:xx:xx:xx:xx:xx了。
後繼常用網卡ip設置方法:
直接通過setup進行設置。
配置多個網卡ifconfig-a查看網路設備eth0/eth1/lo(迴路)。
ifconfigeth1//設備1
ifconfigeth1192.168.1.10netmask255.255.255.0//設置網卡子網及ip
manifconfig
ifconfig--help(T002)
命令