在 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 可能会改变。
我偶尔需要根据 运行 所在的机器自定义 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 可能会改变。