在 MATLAB 中获取(一致的)计算机名称

Get (consistent) computer name in MATLAB

我偶尔需要根据 运行 所在的机器自定义 MATLAB 脚本。我通常使用以下命令来抓取计算机名称:

char(getHostName(java.net.InetAddress.getLocalHost)

这 returns 在 大多数 情况下是一个计算机名称。但是,我的笔记本电脑(一本 Mac 书)因我连接的网络而异。

有没有办法检索计算机的某种唯一标识符,不会根据所连接的网络改变

更新:我忘了说我正在寻找一个 OS 独立的解决方案。我需要找到一个在 Mac、PC 或 Linux.

上都有效的命令

一个很好的独立于网络的标识符是 MAC Address(与 macbook 无关)。每台计算机都有一个唯一的 MAC 地址。您可以在 MATLAB 上使用此命令获取它:

system('ifconfig en0 | grep ether')

你会在输出中得到类似的东西:

ether 80:e6:50:28:76:d0 

你可以使用电脑网卡的Hardware addresses,按照提示here,用下面的Matlab代码解压:

not_win=true;
switch computer('arch')
    case {'maci','maci64'}
        [~,mac_add]=system('ifconfig |grep ether | grep -o -E "([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}"');
    case {'glnx86','glnxa64'}
        [~,mac_add]=system('ifconfig  | grep HWaddr | grep -o -E "([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}"');
    case {'win32','win64'}
        not_win=false;
        sid = '';
        ni = java.net.NetworkInterface.getNetworkInterfaces;
        while ni.hasMoreElements
            addr = ni.nextElement.getHardwareAddress;
            if ~isempty(addr)
                sid = [sid, '.', sprintf('%.2X', typecast(addr, 'uint8'))];
            end
        end
    otherwise, error('Unknown architecture')
end

if(not_win)
    mac_add=regexprep(mac_add,'\r\n|\n|\r','.');
    sid=upper(strrep(mac_add(1:end-1),':',''));
end

sid 变量包含您要查找的唯一标识符。 你必须检测 machine 的架构,因为 java.net.NetworkInterface.getNetworkInterfaces 在 Unix 上不能正常工作,只返回 运行 接口;所以你必须收集 mac 个地址来解析 ifconfig 的结果(看看 here 的一些例子)。

注意!在 Mac 上,如果您启动虚拟 Machine,可能会添加伪造的网络接口,因此 sid 可能会改变。