[原創][分享]用 MAC 來定網卡編號

发表于:2007-07-04来源:作者:点击数: 标签:
不知道你有否在Linux設定過兩張或多張同一型號網卡的經驗嗎? 若有,或許有時會搞不清楚哪張是eth0哪張是eth1? 又,你是否有想到過用網卡的MAC地址來設定呢? 若以上問題(尤其是最後一個)你感興趣的話,那,我這裡教你一個法子試試看: 1)編寫一個renameif

不知道你有否在 Linux 設定過兩張或多張同一型號網卡的經驗嗎?
若有,或許有時會搞不清楚哪張是 eth0 哪張是 eth1 ?
又,你是否有想到過用網卡的 MAC 地址來設定呢?

若以上問題(尤其是最後一個)你感興趣的話,那,我這裡教你一個法子試試看:

1) 編寫一個 renameif 的 script 並存於 /usr/local/sbin/renameif ,
其內容如下:
[code:1:babf3cfadf]#!/bin/bash
PROG=/sbin/nameif
P_ARG="-s"
MACTAB=/etc/mactab
IF_LIST=$(sed 's/#.*$//' $MACTAB)

stop_if () {
        while [ "$2" ]; do
                /sbin/ifconfig -a | grep -q "$1" && /sbin/ifconfig $1 down
                shift 2
        done
}
rn_myif () {
        while [ "$2" ]; do
                $PROG $P_ARG ${1//eth/my} $2
                shift 2
        done
}
rn_eth () {
        while [ "$2" ]; do
                $PROG $P_ARG $1 $2
                shift 2
        done
}

stop_if $IF_LIST
rn_myif $IF_LIST
rn_eth $IF_LIST[/code:1:babf3cfadf]

並加上 x 權限:
# chmod +x /usr/local/sbin/renameif

2) 編寫 /etc/mactab ,將 interface 跟 MAC address 填好,例如:
eth0   00:00:21:d2:30:da
eth1   00:00:21:d5:1b:b8
且分別於 /etc/sysconfig/network-scripts/ifcfg-eth* 裡設定 HWADDR=
如 HWADDR=00:00:21:d2:30:da

3) 修改  /etc/sysconfig/network-scripts/ifup ,
找到如下這行:
        [code:1:babf3cfadf]/sbin/nameif "${REALDEVICE}" "${HWADDR}" || {[/code:1:babf3cfadf]
在該行前面加 renameif 的路逕,使之變成如下:
[code:1:babf3cfadf]        RNIF_SH=/usr/local/sbin/renameif
        test -x ${RNIF_SH} && ${RNIF_SH} &>/dev/null
        /sbin/nameif "${REALDEVICE}" "${HWADDR}" || {[/code:1:babf3cfadf]

5) 重新啟動 network 服務:
# service network stop
# service network start
若改不過來,那就先用 rmmod 將 module 拔掉再跑 network service 。
要是還不行,那就給他 reboot 一下吧﹗呵~~~  ^_^

注意之處:
1) 以上只在 redhat 8.0 上測試過,不保證適用於其它版本。
2) /etc/modules.conf 還是建議設 alias (可用相同 module,這正是本串重點。)
3) 建議將 MAC 寫在 /etc/mactab 內,
    並同時設定 /etc/sysconfig/network-scripts/ifcfg-eth* 裡的 HWADDR= 句子。
    MAC 只能用小寫,除非你去修改 ifdown 裡的 fgrep 命令參數。

 LZG8056 回复于:2003-11-04 09:40:41
尽管不懂,但还是顶!谢谢分享

 bb8848 回复于:2003-11-04 10:36:29
老兄,來點bsd的吧,你的網和鳥哥的做得非常好,

 海之钺 回复于:2003-11-04 11:32:44
靠近鼠标的那个一般是e0
并且依此是e1、e2、e3.....

 frankzh 回复于:2003-11-04 11:54:22
[quote:799918b9cb="網中人"]
5) 重新啟動 network 服務:
# service network stop
# service network start
若改不過來,那就先用 rmmod 將 module 拔掉再跑 network serice 。
要是還不行,那就給他 reboot 一下吧﹗呵~~~  ^_^

注意之..........[/quote:799918b9cb]

多谢 分享  以后 多 发表文章 我们受益不少 呵呵

 tsgx 回复于:2003-11-04 12:39:33
[quote:3dd939bf1e="bb8848"]老兄,來點bsd的吧,你的網和鳥哥的做得非常好,[/quote:3dd939bf1e]原来网中人就是http://www.study-area.org ;======= 的主人啊。敬仰敬仰。。。真有幸在此看网中人的贴子。

 sky-walker 回复于:2003-11-04 15:27:12
跟上网中人大哥一帖,虽然不太一样,但也是关于MAC的

大家都知道,MAC是出厂时网卡的唯一ID,一般改变不了,在Windows下实现较繁琐,
但在Linux下却较易实现

首先关闭网卡
#/sbin/ifconfig  eth0  down

再修改MAC
#/sbin/ifconfig eth0 hw ether 00:AS:YOU:WISH:00
Win下可没这么简单

开启网卡 
#/sbin/ifconfig eht0 up 
 
至于这样做的原因和意义,大家自己捉摸吧(如果和IP绑定连用,那么....)  javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">


不过最好不要把自己的机子变成服务器的MAC, 不然会很难受的  

 網中人 回复于:2003-11-04 15:46:21
不錯不錯~~~  ^_^

總算拋磚引玉了... 大家一起加油!

 双眼皮的猪 回复于:2003-11-04 21:23:53
帮您顶一下啊...好东东 ...

不过改MAC,一般是用来 ***的啊....

 sky-walker 回复于:2003-11-04 22:49:39
[quote:c0ec635d98="双眼皮的猪"]帮您顶一下啊...好东东 ...

不过改MAC,一般是用来 ***的啊....[/quote:c0ec635d98]

hehe,我可是老实人,其实也可用来防犯的 

 platinum 回复于:2003-11-05 09:17:58
这样是真的改了硬件,还是修改了LINUX中的某些CACHE?
如果是改硬件的,不是所有网卡都可以了吧?

 網中人 回复于:2003-11-05 11:37:02
所謂的 hardware ,最終都是被 os 控制的。
ifconfig 的設定不是要改掉網卡的 MAC (跟燒 ROM 不一樣),
只是從 os level 動手腳,將只定 MAC 的 ethernet frame 讀進交給上層協定處理而已。

 platinum 回复于:2003-11-05 14:28:22
下次重新启动,是不是就恢复成原来那样了?
如果没恢复,是不是系统里有记录了已经?
如果系统里有记录了,是不是当系统崩溃后再重新装,又恢复了?

 網中人 回复于:2003-11-05 14:43:46
若下次 reboot ,就要再輸入一次囉。

假如你對開機流程就 daemon 起動熟悉,應可找到不少方法加以設定。
要不然,最簡單就是將命令寫進 /etc/rc.d/rc.local 了...  ^_^

 platinum 回复于:2003-11-05 14:59:43
恩,我认为这是找不到配置文件的最好的办法了,起初网卡我都是在这里设置的 ^_^

 網中人 回复于:2003-11-05 15:50:54
嗯... 越便利使用的系統,其設定通常都越複雜... 同時也增加了設定難度(若不用工具的話)。

我認識不少朋友都喜歡使用 slackware ,其中很大的程度是喜歡他的簡單直接...  ^_^

 sky-walker 回复于:2003-11-05 15:59:05
理论化一下:

ARP缓存中有映射远程IP--->MAC的列表。

其实是一个TSR的数据结构,由本地的内核来管理的。

用保护态下软件改写保护态的HW,也只是对其中的regs flag进行暂时性的修改,即针

对工作态,就象超频软件对CPU所作的

CIH是由于HW商的大意,造成其可通过改写CMOS中的regs,使BIOS中的写引脚获得

足够的电压,.....现在的新款BIOS都是采用mPGA而非DIP,所以不会再害怕

至于BIOS升级,这本身就是HW的写入接口,而且应工作于RM下,一般软件在这种环境

下都无法运行了


...呵呵,接着蹭帖子 

 網中人 回复于:2003-11-05 16:08:22
不過....

針對本機的 MAC ,應該不用寫進 ARP Table 中。
因為 ARP Table 只有當有 IP 封包要送往 Ethernet 時才會參考...
也就是 destination 為其它機器才需用到。
要是送給本機,by default,應會送到 loop back 去吧?

嗯,提出來給大家參考參考...  ^_^

 platinum 回复于:2003-11-06 13:26:49
问个题外话,我做了DHCPD服务,我在哪能看到现在有几台计算机被DHCP服务批准了IP,IP地址各是多少?

 網中人 回复于:2003-11-06 13:35:57
find /var -name 'dhcpd.leases'

原文转自:http://www.ltesting.net