基於Openwrt虛擬路由MAC地址


上傳開發板執行程序

scp傳輸文件

將生成好的可執行文件放到開發板上,文件傳輸方式 SCP。
scp 是 secure copy 的縮寫, scp 是 linux 系統下基於 ssh 登陸進行安全的遠程文件拷貝命令。
基本用法為
scp 本地文件 目標系統同戶名@目標IP地址:目標系統路徑,在回車之后輸入密碼,用法如圖所示。

虛擬機網絡相關設置

在使用本命令之前,要保證開發板與PC機處於同一網段之下,如果Linux使用的是虛擬機,需進行如下設置:

  1. 點擊虛擬機的虛擬網絡編輯器
  2. 添加如下橋接網絡
  3. 點擊虛擬機選擇設置,選擇設置好的網絡
  4. 重啟網絡服務,獲得新的IP地址,可以嘗試使用以下命令:

service network-manager restart

Kali Linux(Debian),則需要用以下命令:

service networking restart

Centos 8,則需要用以下命令:

nmcli c reload

切換到串口控制台,運行可執行文件

如果工具鏈不對,生成的可執行文件也是不能在開發板上執行的。

開機自啟動

啟動腳本

更改有線MAC端口地址

啟動腳本存放在開發板/etc/init.d/目錄中,將編寫好的腳本文件放置在該路徑下可實現開機自啟動。
實現有線端口自啟動腳本如下,輸入ifconfig查看自己需要更改的Wan口,在interface="eth0.2"更改端口名。

#MAC address changer script 
#MAKE SURE the OUI of the MAC address matches a client side wireless NIC vendor
#Place this script in /etc/init.d/                                             
                                                                               
START=94                          
STOP=20 
        
start() {
   interface="eth0.2"
                     
   current_mac=$(ifconfig ${interface} | grep "HWaddr" | awk '{print$5}')
   new_mac=$(dd if=/dev/random bs=1 count=3 2>/dev/null | hexdump -C | head -1 |
   if [ $? -eq 0 ]; then                                                        
      ifconfig $interface down                                                  
      ifconfig $interface hw ether $new_mac
      ifconfig $interface up               
         if [ $? -eq 0 ]; then             
            logger "MAC address successfully changed for $interface from $curren
            current_mac=$(ifconfig ${interface} | grep "HWaddr" | awk '{print$5}
            logger "New MAC address: $current_mac"                              
            exit 0                                                              
         else                                     
            logger "MAC address changing scriped failed"
            exit 1                                      
         fi                                             
   else           
      logger "Failed to generate MAC address. Perhaps you are missing certain sy
      exit 1                                                                    
   fi                                                                           
}           
     
stop() {
   echo "Stopping MAC changer script.."
}   

修改文件權限,啟用該文件

$ chmod +x /etc/init.d/mac-change.sh
$ /etc/init.d/mac-change.sh enable

測試是否生效

$ /etc/init.d/mac-change.sh enabled && echo on
$ /etc/init.d/mac-change.sh start

更改無線MAC端口地址--尚未實現自啟動

  1. 在openwrt里面一般把整個flash分為幾個分區,uboot、kernel、rootfs、rootfs_data、art/factory。

    root@Widora:~# cat /proc/mtd
    dev:    size   erasesize  name
    mtd0: 00030000 00010000 "u-boot"
    mtd1: 00010000 00010000 "u-boot-env"
    mtd2: 00010000 00010000 "factory"
    mtd3: 01fb0000 00010000 "firmware"
    mtd4: 00118da1 00010000 "kernel"
    mtd5: 01e9725f 00010000 "rootfs"
    mtd6: 019e0000 00010000 "rootfs_data"
    
    
  2. 具體分區知識后期再做了解,查看無線MAC在FLANSH存儲值,可通過命令查看

    dd if=/dev/mtdblock2 of=/dev/factory
    hexdump -C /dev/factory
    
    root@Widora:~# ifconfig ra0
    
    
    

  3. 由上可知,無線端口MAC值以十六進制形式存儲在factory文件中,因此可以通過更改factory文件實現更改MAC值,但是還可以通過iwpriv命令查看修改MAC值。
    iwpriv ra0 e2p

  4. 由上可知mac值存儲在[0x0004]、[0x0006]、[0x0008]三個寄存器中,可通過如下命令修改。經過測試,更改該值需要通過重啟路由器才能實現更改MAC值。

iwpriv ra0 e2p 04=0C0F 
iwpriv ra0 e2p 06=020F 
iwpriv ra0 e2p 08=8FAB 

附MAC值命名規則

MAC 地址第二位數字必須是偶數,以下是詳細介紹。
MAC地址通常表示為12個16進制數,每2個16進制數之間用冒號隔開,如:08:00:20:0A:8C:6D 就是一個MAC 地址,其中前6 位16 進制數 08:00:20 代表網絡硬件制造商的編號,它由IEEE 分配,而后3 位16 進制數0A:8C:6D 代表該制造商所制造的某個網絡產品(如網卡)的系列 號。
每個網絡制造商必須確保它所制造的每個以太網設備都具有相同的前三字節以及不同的后三個字節。這樣就可保證世界上每個以太網設備都具有唯一的MAC 地 址。
我們需要注意的是以太網地址的第32 位是組播地址的標志位:
47 ~33 制造廠商標識
32 組播標識位
31 ~24 制造廠商標識
23 ~0 系列號
當組播標識位為1 時表示該MAC 地址是一個組播地址。
對於網卡MAC ,這一位必須是0 ,表示一個單播MAC 地址。以下:
X0:XX:XX:XX:XX:XX
X2:XX:XX:XX:XX:XX
X4:XX:XX:XX:XX:XX
X6:XX:XX:XX:XX:XX
X8:XX:XX:XX:XX:XX
XA:XX:XX:XX:XX:XX
XC:XX:XX:XX:XX:XX
XE:XX:XX:XX:XX:XX
為合法的以太網網卡地址。上面的X 代表0 -F 中的任一個。如果你不是購買網卡,而是自己購買芯片制造,那么地址怎么辦?可以自己使用一個還沒有被ieee 分配的廠商編號就可以了。就算是使用已經分配的廠商編號也沒有不可,只要你能保證在你使用的局域網內,任何兩個網卡的地址不一樣就可以了。地址 FF:FF:FF:FF:FF:FF 為廣播地址,只能用在目的地址段,不能作為源地址段。目的地址為廣播地址的數據包,可以被一個局域網內的所有網卡接收 到。 地址:
X1:XX:XX:XX:XX:XX
X3:XX:XX:XX:XX:XX
X5:XX:XX:XX:XX:XX
X7:XX:XX:XX:XX:XX
X9:XX:XX:XX:XX:XX
XB:XX:XX:XX:XX:XX
XD:XX:XX:XX:XX:XX
XF:XX:XX:XX:XX:XX
為組播地址,只能作為目的地址,不能作為源地址。組播地址可以被支持該組播地址的一組網卡接收到。組播地址主要用在視頻廣播,遠程喚醒(通過發一個特殊的 數據包使網卡產生一個中斷信號,啟動電腦),游戲(多個人在局域網里聯機打游戲)里等。下面是一些具體的組播地址,其他組播地址跟TCP/IP 無關,不做 介紹: 地址 范圍 01:00:5E:00:00:00 ~ 01:00:5E:7F:FF:FF 用於ip 地址的組播 網卡可以接收以下3 種地址的數據包:

  1. 目的地址跟自己的網卡地址是一樣的數據包
  2. 目的地址為FF:FF:FF:FF:FF:FF 廣播地址的數據包
  3. 目的地址為跟自己的組播地址范圍相同的數據包

那么在以太網的應用當中,如果你希望你的數據包只發給一個網卡,目的地址用對方的網卡地址;如果你想把數據包發給所有的網卡,目的地址用廣播地址;如果你想把數據包發給一組網卡,目的地址用組播地址。

組播IP 與組播MAC 的映射

二層組播MAC 定義為:01:00:5e:xx:xx:xx ,其中 xx 由三層的IP 組播組確定。組播地址:組播流使用的 IP 是D 類IP 地址(二進制1110 開始),從224.0.0.0 ~239.255.255.255 。由於組播MAC 地址是一個虛擬的地址,並不是真實網卡的MAC 地址,那么網卡在發送報文時二層MAC 地址怎么確定呢?答案是采用地址映射的方法將三層IP 地址映射到MAC 地址。映射關系如下: 從上面的映射關系可以看出IP 地址的五個bit 無法映射到MAC 層,因為MAC 層的這五個bit 已經確定。也就是說有32 個IP 組播組會被映射為同一個MAC 地址。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM