MAC地址合法性檢測
MAC(Media Access Control或者Medium Access Control)地址,意譯為媒體訪問控制,或稱為實體地址、硬體地址,用來定義網路裝置的位置。在OSI模型中,第三層網路層負責 IP地址,第二層資料鏈路層則負責 MAC地址。
MAC地址是網路卡決定的,是固定的。因此一個主機會有一個MAC地址,而每個網路位置會有一個專屬於它的IP地址。為確保MAC地址的唯一性,乙太網卡製造商將MAC地址固化到網路卡中。地址的前半部分(24位)標識網路卡的製造商,由IEEE分配,稱為OUI(組織唯一識別符號);地址的後半部分由網路卡製造商為其網路卡分配一個唯一的編號。
MAC地址為電腦網路卡的實體地址,每個網路卡擁有全球唯一的MAC,以示區別。
格式通常為6個位元組的二進位制程式碼(以6組16進位制數表示,共佔6個位元組),格式為XX-XX-XX-XX-XX-XX 或者 XX:XX:XX:XX:XX:XX
比如: ED-DD-4D-45-5A-9F
MAC地址是網路卡決定的,是固定的。因此一個主機會有一個MAC地址,而每個網路位置會有一個專屬於它的IP地址。為確保MAC地址的唯一性,乙太網卡製造商將MAC地址固化到網路卡中。地址的前半部分(24位)標識網路卡的製造商,由IEEE分配,稱為OUI(組織唯一識別符號);地址的後半部分由網路卡製造商為其網路卡分配一個唯一的編號。
MAC地址為電腦網路卡的實體地址,每個網路卡擁有全球唯一的MAC,以示區別。
格式通常為6個位元組的二進位制程式碼(以6組16進位制數表示,共佔6個位元組),格式為XX-XX-XX-XX-XX-XX 或者 XX:XX:XX:XX:XX:XX
在一些使用MAC地址的場合中,需要對MAC地址進行合法性檢測,以下提示C和JAVA兩種檢測方法,原理基本一致,都是使用正規表示式進行匹配:
匹配模式:"^([A-Fa-f0-9]{2}[-,:]){5}[A-Fa-f0-9]{2}$"
^ 代表開頭
[A-Fa-f0-9]{2} 表示由兩個16進進字元制組成
[-,:] 分隔符可能 為 " : "或 " - "
{5} 前面由5個類似格式的欄位組成,即 5個 XX- 或 XX:
[A-Fa-f0-9]{2} 表示由兩個16進進字元制組成結尾
$ 代表結尾
1. C/C++實現:
#include <stdio.h>
#include <sys/types.h>
#include <regex.h>
int is_valid_mac_addr(char* mac) {
int status;
const char * pattern = "^([A-Fa-f0-9]{2}[-,:]){5}[A-Fa-f0-9]{2}$";
const int cflags = REG_EXTENDED | REG_NEWLINE;
char ebuf[128];
regmatch_t pmatch[1];
int nmatch = 10;
regex_t reg;
status = regcomp(®, pattern, cflags);//編譯正則模式
if(status != 0) {
regerror(status, ®, ebuf, sizeof(ebuf));
fprintf(stderr, "regcomp fail: %s , pattern '%s' \n",ebuf, pattern);
goto failed;
}
status = regexec(®, mac, nmatch, pmatch,0);//執行正規表示式和快取的比較,
if(status != 0) {
regerror(status, ®, ebuf, sizeof(ebuf));
fprintf(stderr, "regexec fail: %s , mac:\"%s\" \n", ebuf, mac);
goto failed;
}
printf("[%s] match success.\n", __FUNCTION__);
regfree(®);
return 0;
failed:
regfree(®);
return -1;
}
2. JAVA實現:
private boolean isValidMac(String macStr) {
if (macStr == null || macStr.equals("")) {
return false;
}
String macAddressRule = "([A-Fa-f0-9]{2}[-,:]){5}[A-Fa-f0-9]{2}";
// 這是真正的MAC地址;正規表示式;
if (macStr.matches(macAddressRule)) {
Log.i(TAG, "it is a valid MAC address");
return true;
} else {
Log.e(TAG, "it is not a valid MAC address!!!");
return false;
}
}
相關文章
- Linux檢測IP合法性Linux
- mac地址檢查Mac
- AIX 檢視MAC地址AIMac
- 文字檢測預處理地址
- 驗證ip地址合法性程式碼例項
- linux 檢視UUID和MAC地址LinuxUIMac
- 檢視hyper-v主機mac地址Mac
- Python判定IP地址合法性的三種方法Python
- SMART Utility for mac (硬碟檢測)Mac硬碟
- win10查電腦mac地址的操作步驟_win10怎麼檢視mac地址Win10Mac
- MAC 地址與IP地址Mac
- 硬碟檢測工具:SMART Utility for mac硬碟Mac
- mac網站連結檢測軟體——Integrity for macMac網站
- System Dashboard for Mac(Mac系統狀況檢測工具)Mac
- TG Pro for mac(Mac硬體溫度檢測工具)Mac
- 01、MAC地址Mac
- 檢視Linux網路卡UUID和MAC地址---Linux命令LinuxUIMac
- UNIX/LINUX平臺下檢視MAC和WWN地址的方法LinuxMac
- MAC地址完美攻略Mac
- 如何修改mac地址Mac
- java 取得mac地址JavaMac
- IP地址和MAC地址的關係Mac
- ASPNET獲取IP地址 MAC地址Mac
- java獲取ip地址和mac地址JavaMac
- 程式設計師你如何檢查引數的合法性?程式設計師
- Linux下檢測IP地址衝突及解決方法Linux
- 檢視HAIP的地址AI
- 如何對Mac進行基礎檢測和速度測試Mac
- Java 中獲取MAC地址 和IP地址JavaMac
- TG Pro for mac 硬體溫度檢測工具Mac
- 硬體溫度檢測工具:TG Pro macMac
- Duplicate Detective for Mac(重複檔案檢測工具)Mac
- SMART Utility for mac (硬碟檢測) 3.2.7啟用版Mac硬碟
- SRAM儲存器晶片地址引腳線短路檢測方法晶片
- 自動檢測ARouter路由地址分組使用衝突問題路由
- Win10系統如何檢視和修改網路卡mac實體地址Win10Mac
- mac地址和ip地址有什麼區別Mac
- docker檢視容器IP地址Docker