Linux下获取CPUID、硬盘序列号与MAC地址

Linux下获取CPUID、硬盘序列号与 MAC地址在很多系统软件的开发中,需要使用一些系统的唯一性信息。

所以,得到主机的CPUID、硬盘序列号及网卡的MAC地址,就成个一件很重要的应用。

本人经过一番google即自己的钻研,基本上实现了这几个功能。

需要的准备知识有:1.GCC的嵌入汇编,具体的GCC嵌入汇编知识,请参考相关手册2.ioctl系统调用,具体的调用方法,请查看手册页获取CPUID按照网上提供的说明,CPUID并不是所有的Intel CPU都支持的。

如果支持,汇编调用为:eax置0000_0003,调用cpuid。

以下为实现代码(在我的CPU上,并没有得到):#define cpuid(in,a,b,c,d) asm("cpuid": "=a" (a), "=b" (b), "=c" (c), "=d" (d) : "a" (in)); static intgetcpuid (char *id, size_t max){int i;unsigned long li, maxi, maxei, ebx, ecx, edx, unused;cpuid (0, maxi, unused, unused, unused);maxi &= 0xffff;if (maxi < 3){return -1;}cpuid (3, eax, ebx, ecx, edx);snprintf (id, max, "%08lx %08lx %08lx %08lx", eax, ebx, ecx, edx);fprintf (stdout, "get cpu id: %s\n", id);return 0;}获取硬盘序列号这个的实现,采用的是读取/etc/mtab文件,找到/(即根目录)挂载的设备文件,然后打开它,再用系统调用 ioctl来实现的。

ioctl第二个参数为HDIO_GET_IDENTITY, 获得指定文件描述符的标志号ioctl的第三个参数为struct hd_driveid *,在linux/hdreg.h中,struct hd_driveid 的声明有struct hd_driveid {unsigned short config; /* lots of obsolete bit flags */unsigned short cyls; /* Obsolete, "physical" cyls */unsigned short reserved2; /* reserved (word 2) */unsigned short heads; /* Obsolete, "physical" heads */unsigned short track_bytes; /* unformatted bytes per track */unsigned short sector_bytes; /* unformatted bytes per sector */unsigned short sectors; /* Obsolete, "physical" sectors per track */unsigned short vendor0; /* vendor unique */unsigned short vendor1; /* vendor unique */unsigned short vendor2; /* Retired vendor unique */ unsigned char serial_no[20]; /* 0 = not_specified */unsigned short buf_type; /* Retired */unsigned short buf_size; /* Retired, 512 byte increments* 0 = not_specified*/……};,这其中,serial_no为硬盘的序列号。

如果此项为0,则为没有提供。

思路明确了,以下为实现代码:static intgetdiskid (char *id, size_t max){int fd;struct hd_driveid hid;FILE *fp;char line[0x100], *disk, *root, *p;fp = fopen ("/etc/mtab", "r");if (fp == NULL){fprintf (stderr, "No /etc/mtab file.\n");return -1;}fd = -1;while (fgets (line, sizeof line, fp) != NULL){disk = strtok (line, " ");if (disk == NULL){continue;}root = strtok (NULL, " ");if (root == NULL){continue;}if (strcmp (root, "/") == 0){for (p = disk + strlen (disk) - 1; isdigit (*p); p --){*p = '\0';}fd = open (disk, O_RDONLY);break;}}fclose (fp);if (fd < 0){fprintf (stderr, "open hard disk device failed.\n");return -1;}if (ioctl (fd, HDIO_GET_IDENTITY, &hid) < 0){fprintf (stderr, "ioctl error.\n");return -1;}close (fd);snprintf (id, max, "%s", hid.serial_no);fprintf (stdout, "get hard disk serial number: %s\n", id); return 0;}获取MAC地址通过创建一个socket,然后bind特定的IP地址,就可以通过ioctl得到这个套按地绑定的网络接口名称。

然后再通过网络接口名称,得到MAC地址。

如果ioctl的第二个参数为SIOCGIFNAME, 则获得指定网络接口的名称;如果ioctl的第二个参数为SIOCGIFHWADDR,则获得指定网络接口的MAC地址ioctl的第三个参数为struct ifreq *,在linux/if.h头文件里,struct ifreq声明如下:struct ifreq{#define IFHWADDRLEN 6union{char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */} ifr_ifrn;union {struct sockaddr ifru_addr;struct sockaddr ifru_dstaddr;struct sockaddr ifru_broadaddr;struct sockaddr ifru_netmask;struct sockaddr ifru_hwaddr;short ifru_flags;int ifru_ivalue;int ifru_mtu;struct ifmap ifru_map;char ifru_slave[IFNAMSIZ]; /* Just fits the size */char ifru_newname[IFNAMSIZ];void * ifru_data;struct if_settings ifru_settings;} ifr_ifru;},其中,ifrn_name为网络接口的名称,ifr_ifru.ifru_hwaddr为网络接口的MAC地址。

#ifndef MAX_IFINDEX# define MAX_IFINDEX 8#endifstatic intgetmacaddr (const char *ip, char *id, size_t max){int i, sockfd;struct sockaddr_in *loc;struct ifreq req[1];sockfd = socket (AF_INET, SOCK_DGRAM, 0);if (sockfd < 0){fprintf (stderr, "Unable to create socket.\n");return -1;}for (i = 0; i <= MAX_IFINDEX; ++ i){req->ifr_ifindex = i;if (ioctl (sockfd, SIOCGIFNAME, req) < 0)fprintf (stderr, "ioctl error: %s\n", strerror (errno)); continue;}if (ioctl (sockfd, SIOCGIFADDR, req) < 0)fprintf (stderr, "ioctl interface index [%d] error: %s\n", i, strerror (errno));continue;}loc = (struct sockaddr_in *) (&(req->ifr_ifru.ifru_addr));if (loc->sin_addr.s_addr == inet_addr (ip)){fprintf (stderr, "%s bind at %s.\n", ip, req->ifr_name);break;}}if (i == MAX_IFINDEX){fprintf (stderr, "input IP error.\n");close (sockfd);return -1;}if (ioctl (sockfd, SIOCGIFHWADDR, req) < 0){fprintf (stderr, "ioctl error: %s\n", strerror (errno));close (sockfd);return -1;}close (sockfd);snprintf (id, max, "%02X%02X%02X%02X%02X%02X",req->ifr_hwaddr.sa_data[0] & 0xff,req->ifr_hwaddr.sa_data[1] & 0xff,req->ifr_hwaddr.sa_data[2] & 0xff,req->ifr_hwaddr.sa_data[3] & 0xff,req->ifr_hwaddr.sa_data[4] & 0xff,req->ifr_hwaddr.sa_data[5] & 0xff);fprintf (stdout, "MAC address of %s: [%s].\n", req->ifr_name, id);return 0;}(注:文档可能无法思考全面,请浏览后下载,供参考。

合集下载

查看Linux系统内存、CPU、磁盘使用率和详细信息

查看Linux系统内存、CPU、磁盘使用率和详细信息

查看Linux系统内存、CPU、磁盘使⽤率和详细信息⼀、查看内存占⽤1、free# free -m以MB为单位显⽰内存使⽤情况[root@localhost ~]# free -mtotal used free shared buff/cache availableMem: 118521250866841019349873Swap: 601506015# free -h以GB为单位显⽰内存使⽤情况[root@localhost ~]# free -htotal used free shared buff/cache availableMem: 11G 1.2G 8.5G 410M 1.9G 9.6GSwap: 5.9G 0B 5.9G# free -t以总和的形式查询内存的使⽤信息[root@localhost ~]# free -ttotal used free shared buff/cache availableMem: 1213733212853448870628420268198136010105740Swap: 616038006160380Total: 18297712128534415031008# free -s 5周期性的查询内存使⽤信息每5秒执⾏⼀次命令[root@localhost ~]# free -s 5total used free shared buff/cache availableMem: 1213733212807968875008420268198152810110136Swap: 616038006160380解释:Mem:内存的使⽤情况总览表(物理内存)Swap:虚拟内存。

即可以把数据存放在硬盘上的数据shared:共享内存,即和普通⽤户共享的物理内存值buffers:⽤于存放要输出到disk(块设备)的数据的cached:存放从disk上读出的数据total:机器总的物理内存used:⽤掉的内存free:空闲的物理内存注:物理内存(total)=系统看到的⽤掉的内存(used)+系统看到空闲的内存(free)2、查看某个pid的物理内存使⽤情况# cat /proc/PID/status | grep VmRSS[root@localhost ~]# pidof nginx2732727326[root@localhost ~]#[root@localhost ~]# cat /proc/27327/status | grep VmRSSVmRSS: 2652 kB[root@localhost ~]#[root@localhost ~]# cat /proc/27326/status | grep VmRSSVmRSS: 1264 kB[root@localhost ~]#[root@localhost ~]# pidof java1973[root@localhost ~]# cat /proc/1973/status | grep VmRSSVmRSS: 1166852 kB由上⾯可知,nginx服务进程的两个pid所占物理内存为"2652+1264=3916k"3、查看本机所有进程的内存占⽐之和# cat mem_per.sh[root@localhost ~]# cat mem_per.sh#!/bin/bashps auxw|awk '{if (NR>1){print $4}}' > /opt/mem_listawk '{MEM_PER+=$1}END{print MEM_PER}' /opt/mem_list[root@localhost ~]#[root@localhost ~]# chmod755 mem_per.sh[root@localhost ~]#[root@localhost ~]# sh mem_per.sh64.4[root@localhost ~]#脚本配置解释:ps -auxw|awk '{print $3}' 表⽰列出本机所有进程的cpu利⽤率情况,结果中第⼀⾏带"%CPU"字符ps -auxw|awk '{print $4}' 表⽰列出本机所有进程的内存利⽤率情况,结果中第⼀⾏带"%MEM"字符ps auxw|awk '{if (NR>1){print $4}} 表⽰将"ps auxw"结果中的第⼀⾏过滤(NR>1)掉,然后打印第4⾏⼆、查看CPU使⽤情况1、toptop后键⼊P看⼀下谁占⽤最⼤# top -d 5周期性的查询CPU使⽤信息每5秒刷新⼀次top - 02:37:55 up 4 min, 1 user, load average: 0.02, 0.10, 0.05Tasks: 355 total, 1 running, 354 sleeping, 0 stopped, 0 zombie%Cpu(s): 3.0 us, 2.8 sy, 0.0 ni, 94.2id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st# us:表⽰⽤户空间程序的cpu使⽤率(没有通过nice调度)# sy:表⽰系统空间的cpu使⽤率,主要是内核程序。

9个Linux查看系统硬件信息命令(实例详解)

9个Linux查看系统硬件信息命令(实例详解)

9个Linux查看系统硬件信息命令(实例详解)在Linux下,我们精要遇到需要查看系统的硬件信息,这⾥我罗列了查看系统硬件信息的实⽤命令,并做了分类,实例解说。

执⾏环境:ubuntu 16.041. cpulscpu命令,查看的是cpu的统计信息.root@ubuntu:/home/peng/# lscpuArchitecture: x86_64 #cpu架构CPU op-mode(s): 32-bit, 64-bitByte Order: Little Endian #⼩尾序CPU(s): 1 #总共有1核On-line CPU(s) list: 0Thread(s) per core: 1 #每个cpu核,只能⽀持⼀个线程,即不⽀持超线程Core(s) per socket: 1Socket(s): 1NUMA node(s): 1Vendor ID: GenuineIntel #cpu产商 intelCPU family: 6Model: 158Model name: Intel(R) Core(TM) i5-7500 CPU @ 3.40GHzStepping: 9CPU MHz: 3408.070BogoMIPS: 6816.14Hypervisor vendor: VMwareVirtualization type: full #⽀持cpu虚拟化技术L1d cache: 32KL1i cache: 32KL2 cache: 256KL3 cache: 6144KNUMA node0 CPU(s): 0查看/proc/cpuinfo,可以知道每个cpu信息,如每个CPU的型号,主频等。

root@ubuntu:/home/peng# cat /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 158model name : Intel(R) Core(TM) i5-7500 CPU @ 3.40GHzstepping : 9microcode : 0x48cpu MHz : 3408.070cache size : 6144 KBphysical id : 0siblings : 1core id : 0cpu cores : 1apicid : 0initial apicid : 0fpu : yesfpu_exception : yescpuid level : 22wp : yes.....2. 内存概要查看内存情况root@ubuntu:/home/peng# free -mtotal used free shared buff/cache availableMem: 1970 702 315 13 952 1025Swap: 974 20 954这⾥的单位是MB,总共的内存是1970MB。

如何在Linux系统中查看网络接口的MAC地址

如何在Linux系统中查看网络接口的MAC地址

如何在Linux系统中查看网络接口的MAC地址MAC地址(Media Access Control Address)是网络设备的唯一标识符,它在数据链路层起到重要的作用。

在Linux系统中,我们可以通过一些命令来查看网络接口的MAC地址。

本文将介绍一些常用的方法来实现这个目标。

方法一:使用ifconfig命令ifconfig命令在Linux系统中用于配置和显示网络接口的状态。

它可以显示网络接口的IP地址、MAC地址等信息。

打开终端,输入以下命令:```ifconfig```然后按回车键执行命令,系统将显示所有网络接口的相关信息。

在每个网络接口的输出中,可以找到一行标有"HWaddr"的字段,它后面的就是该接口的MAC地址。

方法二:使用ip命令ip命令是Linux系统中用于配置和显示网络接口的新一代工具。

它比ifconfig命令更加强大且易用。

打开终端,输入以下命令:```ip link show```按回车键执行命令,将显示所有网络接口的信息。

在每个网络接口的输出中,可以找到一行标有"link/ether"的字段,它后面的就是该接口的MAC地址。

方法三:查看/sys/class/net目录Linux系统将网络接口的相关信息保存在/sys/class/net目录下。

打开终端,输入以下命令:```cd /sys/class/netls```按回车键执行命令,将列出所有网络接口的文件夹。

进入对应的网络接口文件夹,例如eth0,输入以下命令:```cd eth0cat address```按回车键执行命令,将显示该接口的MAC地址。

方法四:使用arp命令arp命令用于管理系统的ARP缓存,它可以显示网络接口的IP地址、MAC地址等信息。

打开终端,输入以下命令:```arp -a```按回车键执行命令,系统将显示ARP缓存中的所有条目。

在每个条目的输出中,可以找到一列标有"ether"的字段,它后面的就是对应接口的MAC地址。

获取硬盘序列号

获取硬盘序列号

取网卡MAC、硬盘序列号、CPUID、BIOS编号2011-03-10 10:48:58| 分类:古老的程序片段| 标签:|字号大中小订阅本文中所有原理及思想均取自网络,有修改。

其中获取硬盘序列号、获取CPU编号、获取BIOS编号的原始代码的著作权归各自作者所有。

以下代码可以取得系统特征码(网卡MAC、硬盘序列号、CPU ID、BIOS编号)BYTE szSystemInfo[4096]; // 在程序执行完毕后,此处存储取得的系统特征码UINT uSystemInfoLen = 0; // 在程序执行完毕后,此处存储取得的系统特征码的长度// 网卡MAC 地址,注意: MAC 地址是可以在注册表中修改的{UINT uErrorCode = 0;IP_ADAPTER_INFO iai;ULONG uSize = 0;DWORD dwResult = GetAdaptersInfo( &iai, &uSize );if( dwResult == ERROR_BUFFER_OVERFLOW ){IP_ADAPTER_INFO* piai = ( IP_ADAPTER_INFO* )HeapAlloc( GetProcessHeap( ), 0, uSize );if( piai != NULL ){dwResult = GetAdaptersInfo( piai, &uSize );if( ERROR_SUCCESS == dwResult ){IP_ADAPTER_INFO* piai2 = piai;while( piai2 != NULL && ( uSystemInfoLen + piai2->AddressLength ) < 4096U ){CopyMemory( szSystemInfo + uSystemInfoLen, piai2->Address, piai2->AddressLength );uSystemInfoLen += piai2->AddressLength;piai2 = piai2->Next;}}else{uErrorCode = 0xF0000000U + dwResult;}VERIFY( HeapFree( GetProcessHeap( ), 0, piai ) );}else{return FALSE;}}else{uErrorCode = 0xE0000000U + dwResult;}if( uErrorCode != 0U ){return FALSE;}}// 硬盘序列号,注意:有的硬盘没有序列号{OSVERSIONINFO ovi = { 0 };ovi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );GetVersionEx( &ovi );if( ovi.dwPlatformId != VER_PLATFORM_WIN32_NT ){// Only Windows 2000, Windows XP, Windows Server 2003...return FALSE;}else{if( !WinNTHDSerialNumAsPhysicalRead( szSystemInfo, &uSystemInfoLen, 1024 ) ){WinNTHDSerialNumAsScsiRead( szSystemInfo, &uSystemInfoLen, 1024 );}}}// CPU ID{BOOL bException = FALSE;BYTE szCpu[16] = { 0 };UINT uCpuID = 0U;__try{_asm{mov eax, 0cpuidmov dword ptr szCpu[0], ebxmov dword ptr szCpu[4], edxmov dword ptr szCpu[8], ecxmov eax, 1cpuidmov uCpuID, edx}}__except( EXCEPTION_EXECUTE_HANDLER ){bException = TRUE;}if( !bException ){CopyMemory( szSystemInfo + uSystemInfoLen, &uCpuID, sizeof( UINT ) );uSystemInfoLen += sizeof( UINT );uCpuID = strlen( ( char* )szCpu );CopyMemory( szSystemInfo + uSystemInfoLen, szCpu, uCpuID );uSystemInfoLen += uCpuID;}}// BIOS 编号,支持AMI, AWARD, PHOENIX{SIZE_T ssize;LARGE_INTEGER so;so.LowPart=0x000f0000;so.HighPart=0x00000000;ssize=0xffff;wchar_t strPH[30]=L\\device\\physicalmemory;DWORD ba=0;UNICODE_STRING struniph;struniph.Buffer=strPH;struniph.Length=0x2c;struniph.MaximumLength =0x2e;OBJECT_ATTRIBUTES obj_ar;obj_ar.Attributes =64;obj_ar.Length =24;obj_ar.ObjectName=&struniph;obj_ar.RootDirectory=0;obj_ar.SecurityDescriptor=0;obj_ar.SecurityQualityOfService =0;HMODULE hinstLib = LoadLibrary("ntdll.dll");ZWOS ZWopenS=(ZWOS)GetProcAddress(hinstLib,"ZwOpenSection");ZWMV ZWmapV=(ZWMV)GetProcAddress(hinstLib,"ZwMapViewOfSection");ZWUMV ZWunmapV=(ZWUMV)GetProcAddress(hinstLib,"ZwUnmapViewOfSection");//调用函数,对物理内存进行映射HANDLE hSection;if( 0 == ZWopenS(&hSection,4,&obj_ar) &&0 == ZWmapV(( HANDLE )hSection, //打开Section时得到的句柄( HANDLE )0xFFFFFFFF, //将要映射进程的句柄,&ba, //映射的基址0,0xFFFF, //分配的大小&so, //物理内存的地址&ssize, //指向读取内存块大小的指针1, //子进程的可继承性设定0, //分配类型2 //保护类型) )//执行后会在当前进程的空间开辟一段64k的空间,并把f000:0000到f000:ffff处的内容映射到这里//映射的基址由ba返回,如果映射不再有用,应该用ZwUnmapViewOfSection断开映射{BYTE* pBiosSerial = ( BYTE* )ba;UINT uBiosSerialLen = FindAwardBios( &pBiosSerial );if( uBiosSerialLen == 0U ){uBiosSerialLen = FindAmiBios( &pBiosSerial );if( uBiosSerialLen == 0U ){uBiosSerialLen = FindPhoenixBios( &pBiosSerial );}}if( uBiosSerialLen != 0U ){CopyMemory( szSystemInfo + uSystemInfoLen, pBiosSerial, uBiosSerialLen );uSystemInfoLen += uBiosSerialLen;}ZWunmapV( ( HANDLE )0xFFFFFFFF, ( void* )ba );}}// 完毕,系统特征码已取得。

C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

C#获取机器码的⽅法详解(机器名,CPU编号,硬盘编号,⽹卡mac等)本⽂实例讲述了C#获取机器码的⽅法。

分享给⼤家供⼤家参考,具体如下:using System.Runtime.InteropServices;using System.Management;using System;public class HardwareInfo{//取机器名public string GetHostName(){return .Dns.GetHostName();}//取CPU编号public String GetCpuID(){try{ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc.GetInstances();String strCpuID = null ;foreach( ManagementObject mo in moc ){strCpuID = mo.Properties["ProcessorId"].Value.ToString();break;}return strCpuID;}catch{return "";}}//end method//取第⼀块硬盘编号public String GetHardDiskID(){try{ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");String strHardDiskID = null ;foreach(ManagementObject mo in searcher.Get()){strHardDiskID = mo["SerialNumber"].ToString().Trim();break;}return strHardDiskID ;}catch{return "";}}//endpublic enum NCBCONST{NCBNAMSZ =16, /* absolute length of a net name */MAX_LANA =254, /* lana's in range 0 to MAX_LANA inclusive */NCBENUM =0x37, /* NCB ENUMERATE LANA NUMBERS */NRC_GOODRET =0x00, /* good return */NCBRESET =0x32, /* NCB RESET */NCBASTAT =0x33, /* NCB ADAPTER STATUS */NUM_NAMEBUF =30, /* Number of NAME's BUFFER */}[StructLayout(LayoutKind.Sequential)]public struct ADAPTER_STATUS{[MarshalAs(UnmanagedType.ByValArray, SizeConst=6)]public byte[] adapter_address;public byte rev_major;public byte reserved0;public byte adapter_type;public byte rev_minor;public ushort duration;public ushort frmr_recv;public ushort frmr_xmit;public ushort iframe_recv_err;public ushort xmit_aborts;public uint xmit_success;public uint recv_success;public ushort iframe_xmit_err;public ushort recv_buff_unavail;public ushort t1_timeouts;public ushort ti_timeouts;public uint reserved1;public ushort free_ncbs;public ushort max_cfg_ncbs;public ushort max_ncbs;public ushort xmit_buf_unavail;public ushort max_dgram_size;public ushort pending_sess;public ushort max_cfg_sess;public ushort max_sess;public ushort max_sess_pkt_size;public ushort name_count;}[StructLayout(LayoutKind.Sequential)]public struct NAME_BUFFER{[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]public byte[] name;public byte name_num;public byte name_flags;}[StructLayout(LayoutKind.Sequential)]public struct NCB{public byte ncb_command;public byte ncb_retcode;public byte ncb_lsn;public byte ncb_num;public IntPtr ncb_buffer;public ushort ncb_length;[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]public byte[] ncb_callname;[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NCBNAMSZ)]public byte[] ncb_name;public byte ncb_rto;public byte ncb_sto;public IntPtr ncb_post;public byte ncb_lana_num;public byte ncb_cmd_cplt;[MarshalAs(UnmanagedType.ByValArray, SizeConst=10)]public byte[] ncb_reserve;public IntPtr ncb_event;}[StructLayout(LayoutKind.Sequential)]public struct LANA_ENUM{public byte length;[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.MAX_LANA)]public byte[] lana;}[StructLayout(LayoutKind.Auto)]public struct ASTAT{public ADAPTER_STATUS adapt;[MarshalAs(UnmanagedType.ByValArray, SizeConst=(int)NCBCONST.NUM_NAMEBUF)] public NAME_BUFFER[] NameBuff;}public class Win32API{[DllImport("NETAPI32.DLL")]public static extern char Netbios(ref NCB ncb);}//取⽹卡macpublic string GetMacAddress(){string addr="";try{int cb;ASTAT adapter;NCB Ncb=new NCB();char uRetCode;LANA_ENUM lenum;Ncb.ncb_command = (byte)NCBCONST.NCBENUM;cb = Marshal.SizeOf(typeof(LANA_ENUM));Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);Ncb.ncb_length = (ushort)cb;uRetCode = bios(ref Ncb);lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));Marshal.FreeHGlobal(Ncb.ncb_buffer);if(uRetCode != (short)NCBCONST.NRC_GOODRET)return "";for(int i=0; i < lenum.length ;i++){Ncb.ncb_command = (byte)NCBCONST.NCBRESET;Ncb.ncb_lana_num = na[i];uRetCode = bios(ref Ncb);if(uRetCode != (short)NCBCONST.NRC_GOODRET)return "";Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;Ncb.ncb_lana_num = na[i];Ncb.ncb_callname[0]=(byte)'*';cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER))*(int)NCBCONST.NUM_NAMEBUF; Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);Ncb.ncb_length = (ushort)cb;uRetCode = bios(ref Ncb);adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));Marshal.FreeHGlobal(Ncb.ncb_buffer);if (uRetCode == (short)NCBCONST.NRC_GOODRET){if(i>0)addr += ":";addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",adapter.adapt.adapter_address[0],adapter.adapt.adapter_address[1],adapter.adapt.adapter_address[2],adapter.adapt.adapter_address[3],adapter.adapt.adapter_address[4],adapter.adapt.adapter_address[5]);}}}catch{}return addr.Replace(' ', '0');}}更多关于C#相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家C#程序设计有所帮助。

linux查看主板型号、CPU、显卡、硬盘等信息

linux查看主板型号、CPU、显卡、硬盘等信息

linux查看主板型号、CPU、显卡、硬盘等信息系统uname -a # 查看内核/操作系统/CPU信息head -n 1 /etc/issue # 查看操作系统版本cat /proc/cpuinfo # 查看CPU信息hostname # 查看计算机名lspci -tv # 列出所有PCI设备lsusb -tv # 列出所有USB设备lsmod # 列出加载的内核模块env # 查看环境变量资源free -m # 查看内存使⽤量和交换区使⽤量df -h # 查看各分区使⽤情况du -sh <⽬录名> # 查看指定⽬录的⼤⼩grep MemTotal /proc/meminfo # 查看内存总量grep MemFree /proc/meminfo # 查看空闲内存量uptime # 查看系统运⾏时间、⽤户数、负载cat /proc/loadavg # 查看系统负载磁盘和分区mount | column -t # 查看挂接的分区状态fdisk -l # 查看所有分区swapon -s # 查看所有交换分区hdparm -i /dev/hda # 查看磁盘参数(仅适⽤于IDE设备)dmesg | grep IDE # 查看启动时IDE设备检测状况⽹络ifconfig # 查看所有⽹络接⼝的属性iptables -L # 查看防⽕墙设置route -n # 查看路由表netstat -lntp # 查看所有监听端⼝netstat -antp # 查看所有已经建⽴的连接netstat -s # 查看⽹络统计信息进程ps -ef # 查看所有进程top # 实时显⽰进程状态⽤户w # 查看活动⽤户id <⽤户名> # 查看指定⽤户信息last # 查看⽤户登录⽇志cut -d: -f1 /etc/passwd # 查看系统所有⽤户cut -d: -f1 /etc/group # 查看系统所有组crontab -l # 查看当前⽤户的计划任务服务chkconfig --list # 列出所有系统服务chkconfig --list | grep on # 列出所有启动的系统服务程序rpm -qa # 查看所有安装的软件包查看⽹卡型号lspci | grep Ethernet00:19.0 Ethernet controller: Intel Corporation 82567V-2 Gigabit Network Connection查看硬盘信息(查看硬盘型号和硬盘序列号):df -hFilesystem Size Used Avail Use% Mounted on/dev/sda5 2.0G 272M 1.6G 15% //dev/sda8 199G 188M 189G 1% /home/dev/sda3 9.7G 1.3G 7.9G 15% /usr/dev/sda2 9.7G 198M 9.0G 3% /var/dev/sda1 99M 17M 77M 18% /boot/dev/sda:Model=SAMSUNG HE253GJ , FwRev=1AJ30001, SerialNo= S2B5J90ZC12060Config={ Fixed }RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=?16?CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=268435455IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}PIO modes: pio0 pio1 pio2 pio3 pio4DMA modes: mdma0 mdma1 mdma2UDMA modes: udma0 udma1 udma2AdvancedPM=yes: disabled (255) WriteCache=enabledDrive conforms to: unknown: ATA/ATAPI-0 ATA/ATAPI-1 ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6 ATA/ATAPI-7 * signifies the current active modedmesg | grep ATAata1: SATA max UDMA/133 cmd 0xf190 ctl 0xf180 bmdma 0xf150 irq 185ata2: SATA max UDMA/133 cmd 0xf170 ctl 0xf160 bmdma 0xf158 irq 185ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300)ata1.00: ATA-8: SAMSUNG HE253GJ, 1AJ30001, max UDMA/133ata2: SATA link down (SStatus 0 SControl 300)Vendor: ATA Model: SAMSUNG HE253GJ Rev: 1AJ3ata3: SATA max UDMA/133 cmd 0xf130 ctl 0xf120 bmdma 0xf0f0 irq 185ata4: SATA max UDMA/133 cmd 0xf110 ctl 0xf100 bmdma 0xf0f8 irq 185ata3: SATA link down (SStatus 0 SControl 300)ata4: SATA link down (SStatus 0 SControl 300)ata5: PATA max UDMA/100 cmd 0xe040 ctl 0xe030 bmdma 0xe000 irq 177查看主板型号:dmidecode | more# dmidecode 2.10SMBIOS 2.4 present.57 structures occupying 2318 bytes.Table at 0x000E84B0.Handle 0x0000, DMI type 0, 24 bytesBIOS InformationVendor: Intel Corp.Version: GTG4310H.86A.0019.2009.0625.1334Release Date: 06/25/2009.....System Information 服务器品牌Manufacturer:Product Name: (没有信息表⽰⾮品牌或未识别)Version:Serial Number:UUID: 889BD67E-8D96-11DE-AC40-0013D4D9C9E8Wake-up Type: Power SwitchSKU Number: Not SpecifiedFamily: Not SpecifiedHandle 0x0002, DMI type 2, 15 bytesBase Board Information 主板型号/主板信息Manufacturer: Intel CorporationProduct Name: DG43GTVersion: AAE62768-300Serial Number: BTGT9340022NProcessor Information CPU信息/CPU型号/CPU主频Socket Designation: PROCESSORType: Central ProcessorFamily: Pentium DManufacturer: Intel(R) Corp.ID: 7A 06 01 00 FF FB EB BFSignature: Type 0, Family 6, Model 23, Stepping 10Version: Pentium(R) Dual-Core CPU E6500 @ 2.93GHzVoltage: 1.2 VExternal Clock: 266 MHzMax Speed: 4000 MHzCurrent Speed: 2931 MHzStatus: Populated, EnabledUpgrade: Socket LGA775Cache Information 硬件和CPU缓存情况Socket Designation: L1-CacheConfiguration: Enabled, Not Socketed, Level 1Operational Mode: Write BackInstalled Size: 32 kBMaximum Size: 32 kBBIOS Language Information BIOS语⾔Installable Languages: 1en|US|iso8859-1Currently Installed Language: en|US|iso8859-1 Physical Memory Array 主板最⼤⽀持内存Location: System Board Or MotherboardUse: System MemoryError Correction Type: NoneMaximum Capacity: 16 GBError Information Handle: Not ProvidedNumber Of Devices: 4Handle 0x002C, DMI type 19, 15 bytesMemory Array Mapped Address ⽬前的内存Starting Address: 0x00000000000Ending Address: 0x000FFFFFFFFRange Size: 4 GBPhysical Array Handle: 0x002BPartition Width: 0On Board Device Information 显卡型号Type: VideoStatus: EnabledDescription: Intelr GMA X4500 Video Device。

C#获取本地计算机名,IP,MAC地址,硬盘ID

C#获取本地计算机名,IP,MAC地址,硬盘IDpublic string CpuID;public string MacAddress;public string DiskID;public string IpAddress;public string LoginUserName;public string ComputerName;public string SystemType;public string TotalPhysicalMemory; //单位:Mprivate static Computer _instance;public static Computer Instance(){if (_instance == null)_instance = new Computer();return _instance;}public Computer(){CpuID = GetCpuID();MacAddress = GetMacAddress();DiskID = GetDiskID();IpAddress = GetIPAddress();LoginUserName = GetUserName();SystemType = GetSystemType();TotalPhysicalMemory = GetTotalPhysicalMemory(); ComputerName = GetComputerName();}public string GetCpuID(){try{//获取CPU序列号代码string cpuInfo = "";//cpu序列号ManagementClass mc = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){cpuInfo = mo.Properties["ProcessorId"].Value.ToString();}moc = null;mc = null;return cpuInfo;}catch{return "unknow";}finally{}}public string GetMacAddress(){try{//获取网卡硬件地址string mac = "";ManagementClass mc = newManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){mac = mo["MacAddress"].ToString();break;}}moc = null;mc = null;return mac;}catch{return "unknow";}finally{}}public string GetIPAddress(){try{//获取IP地址string st = "";ManagementClass mc = newManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){if ((bool)mo["IPEnabled"] == true){//st=mo["IpAddress"].ToString();System.Array ar;ar = (System.Array)(mo.Properties["IpAddress"].Value);st = ar.GetValue(0).ToString();break;}}moc = null;mc = null;return st;}catch{return "unknow";}finally{}}public string GetDiskID(){try{//获取硬盘IDString HDid = "";ManagementClass mc = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){HDid = (string)mo.Properties["Model"].Value;}moc = null;mc = null;return HDid;}catch{return "unknow";}finally{}}/// <summary>/// 操作系统的登录用户名/// </summary>/// <returns></returns>public string GetUserName(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["UserName"].ToString();}moc = null;mc = null;return st;}catch{return "unknow";}finally{}}/// <summary>/// PC类型/// </summary>/// <returns></returns>public string GetSystemType(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["SystemType"].ToString();}moc = null;mc = null;return st;}catch{return "unknow";}finally{}}/// <summary>/// 物理内存/// </summary>/// <returns></returns>public string GetTotalPhysicalMemory(){try{string st = "";ManagementClass mc = new ManagementClass("Win32_ComputerSystem"); ManagementObjectCollection moc = mc.GetInstances();foreach (ManagementObject mo in moc){st = mo["TotalPhysicalMemory"].ToString();}moc = null;mc = null;return st;}catch{return "unknow";}finally{}}/// <summary>////// </summary>/// <returns></returns>public string GetComputerName(){try{return System.Environment.GetEnvironmentVariable("ComputerName"); }catch{return "unknow";}finally{}。

Linux下获取CPUID、硬盘序列号与 MAC地址

getmacaddr (const char *ip, char *id, size_t max)
{
int i, sockfd;
struct sockaddr_in *loc;
struct ifreq req[1];
sockfd = socket (AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0)
struct if_settings ifru_settings;
} ifr_ifru;
}
,其中,ifrn_name为网络接口的名称,ifr_ifru.ifru_hwaddr为网络接口的MAC地址。
#ifndef MAX_IFINDEX
# define MAX_IFINDEX 8
#endif
static int
short ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
void * ifru_data;
snprintf (id, max, "%08lx %08lx %08lx %08lx", eax, ebx, ecx, edx);
fprintf (stdout, "get cpu id: %s\n", id);
return 0;
}
这个的实现,采用的是读取/etc/mtab文件,找到/(即根目录)挂载的设备文件,然后打开它,再用系统调用ioctl来实现的。

查询磁盘scsi_id的方法

查询磁盘scsi_id的方法
在Linux操作系统中,磁盘scsi_id是唯一标识一块磁盘的一个关键信息。

它能够帮助我们确定磁盘的唯一身份,以及在磁盘来回移动时识别其更改的位置。

因此,了解如何查询磁盘scsi_id是非常重要的。

1. 使用命令行
可以在终端控制台上使用命令行来查询磁盘scsi_id。

具体操作步骤如下:
1) 打开终端控制台,输入以下命令:
lsblk
该命令用于显示当前系统的所有存储设备,包括硬盘、移动设备、U盘等等。

执行该命令后,会显示出所有磁盘的设备名称、磁盘分区大小等信息。

假设要查询sda磁盘的scsi_id,可以使用以下命令:
sudo scsi_id -g -u -s /block/sda
该命令中的“/block/sda”表示需要查询的磁盘路径,可以根据实际情况进行修改。

执行该命令后,会输出该磁盘的scsi_id信息。

2. 使用图形界面
1) 进入“磁盘”应用程序
打开Ubuntu上的“活动”图标,搜索“磁盘”应用程序并打开。

2) 查看磁盘信息
在“磁盘”应用程序中,可以看到所有磁盘的基本信息,包括设备名称、磁盘分区大小、磁盘类型等。

找到要查询的磁盘,点击它的设备名称。

在弹出的磁盘信息对话框中,可以看到该磁盘的更多详细信息,包括scsi_id等信息。

总结
查询磁盘scsi_id是Linux系统中非常重要的一个任务。

通过以上两种方法,用户可以轻松地查询磁盘的scsi_id信息。

如果用户想要使用Linux系统进行磁盘分区、格式化等操作,了解磁盘scsi_id信息就显得尤为必要。

如何在Linux系统中查看系统硬件信息

如何在Linux系统中查看系统硬件信息在使用Linux系统时,了解计算机的硬件信息对于优化性能、故障排除和系统管理都非常重要。

幸运的是,在Linux中,我们可以使用一些命令和工具来查看系统的硬件信息。

本文将介绍在Linux系统中查看系统硬件信息的几种常用方法。

1. 使用lshw命令lshw是Linux硬件检测工具,它可以提供完整的硬件信息。

要使用lshw命令,请按照以下步骤操作:打开终端窗口,输入以下命令并按下回车键:```sudo lshw```系统可能会要求你输入管理员密码以获得root访问权限。

一旦通过验证,lshw将会列出所有系统硬件的详细信息,包括处理器、内存、磁盘、显卡等。

你可以根据需要滚动查看或使用管道将结果输出到文件中。

2. 使用dmidecode命令dmidecode是一个命令行工具,用于从BIOS中读取硬件信息。

要使用dmidecode命令,请按照以下步骤操作:打开终端窗口,输入以下命令并按下回车键:sudo dmidecode```dmidecode将显示系统的各种硬件组件的详细信息,包括处理器、内存、磁盘、主板、BIOS等。

通过阅读该命令的输出,你可以了解系统的硬件规格和配置信息。

3. 使用lspci命令lspci是一个用于列出PCI设备信息的命令。

要使用lspci命令,请按照以下步骤操作:打开终端窗口,输入以下命令并按下回车键:```lspci```lspci命令将列出所有PCI设备的信息,包括网络适配器、声卡、显卡、USB控制器等。

你可以根据需要滚动查看或使用管道将结果输出到文件中。

4. 使用lsblk命令lsblk命令可以用来显示系统中所有块设备的信息,包括硬盘、分区和挂载点。

要使用lsblk命令,请按照以下步骤操作:打开终端窗口,输入以下命令并按下回车键:lsblk```lsblk命令将显示系统中所有块设备的树形结构,包括设备名称、大小、挂载点等。

通过阅读该命令的输出,你可以了解系统中存储设备的配置情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档