Try get the physical address(hardware MAC address) of the hosts network interfaces. Filter the virtual machine network card, VPN virtual network card, etc., and return the real MAC address information of the physical network card.
In Node.js or electron applications, it may be necessary to use MAC address and IP address as important marks to identify the uniqueness of the device, and use them as the basis for establishing the blacklist / whitelist mechanism of user equipment.
Via the API of os.networkInterfaces()
you can easily get the information of the device network card.
However, when the virtual machine and VPN are enabled on the user's machine, the number of network cards returned by the API may be very large. At this time, it is necessary to identify the real physical network card to ensure that the information of the only physical network card can be accurately returned no matter whether the virtual network card is used or not, so as to avoid misjudgment caused by identification error.
npm i @lzwme/get-physical-address
# use yarn
yarn add @lzwme/get-physical-address
Example:
import { getNetworkIFaceOne, getMac, isVirtualMac } from '@lzwme/get-physical-address';
getNetworkIFaceOne().then(item => {
console.log(`isVirtualMac: ${isVirtualMac(item.mac, item.desc)}. the MAC address is ${item.mac}, the IP address is ${item.address}`);
});
getMac().then(mac => console.log(`the MAC address is ${mac}`));
getMac('en0').then(mac => console.log(`the MAC address for en0 is ${mac}`));
Example for some other API:
import { isMac, hasMac, isValidMac, isVirtualMac, formatMac, getAllPhysicsMac } from '@lzwme/get-physical-address';
isMac('aa-bb-cc-dd-ee-ff'); // true
hasMac('The MAC address is aa-bb-cc-dd-ee-ff'); // true
isMac('00:00:00:00:00:00'); // true
isValidMac('00:00:00:00:00:00'); // false
formatMac('AA-BB-CC-DD-EE-FF'); // aa:bb:cc:dd:ee:ff
isVirtualMac('00:0c:29:ae:ce'); // true
getAllMac().then(list => console.log(list));
getAllPhysicsMac('IPv4').then(list => console.log(list));
getMac(iface?: string): Promise<string>
getAllPhysicsMac(family?: 'IPv4' | 'IPv6'): Promise<string[]>
getAllMac(): string[]
Filtered byinternal=true
andisZeroMac(macAdress)
getNetworkIFaces(iface?: string, family?: 'IPv4' | 'IPv6'): Promise<os.NetworkInterfaceInfo[]>
getNetworkIFaceOne(iface?: string): Promise<os.NetworkInterfaceInfoIPv4 | os.NetworkInterfaceInfoIPv6>
getArpTable(arpSstdout?: string)
getArpMacByIp(ip: string)
getArpIpByMac(mac: string)
isMac(mac: string): boolean
hasMac(str: string): boolean
isZeroMac(mac: string): boolean
isValidMac(mac: string): boolean
formatMac(mac: string): string
git clone https://github.com/lzwme/get-physical-address
yarn install
npm link
yarn dev
@lzwme/get-physical-address
is released under the MIT license.
该插件由志文工作室开发和维护。