文档库 最新最全的文档下载
当前位置:文档库 › Linux下获取CPUID、硬盘序列号与 MAC地址

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

Linux下获取CPUID、硬盘序列号与 MAC地址
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 int

getcpuid (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 int

getdiskid (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 6

union

{

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

#endif

static int

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)

{

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;

}

Windows中获取MAC地址的几种方法

Windows中获取MAC地址的几种方法 1.NDIS(DDK)通过驱动程序获取MAC地址 ndis规范中说明,网卡驱动程序支持ioctl_ndis_query_stats接口 参数如下: OID_802_3_PERMANENT_ADDRESS :物理地址 OID_802_3_CURRENT_ADDRESS :mac地址 于是我们的方法就得到了。 首先,看看注册表,找一找网卡有几块,分别是什么设备名。 具体位置和os有关,2000下在hlm\software\microsoft\windows nt\current version\networkcards。 然后createfile(devicename,...)注意,要用linkname,因此 还要加上"////.//device//". 接着 deviceiocontrol(hmac,IOCTL_NDIS_QUERY_STA TS, OID_802_3_PERMANENT_ADDRESS/OID_802_3_CURRENT_ADDRESS...) 具体的情况可以参看ddk下的 OID_802_3_CURRENT_ADDRESS条目 https://www.wendangku.net/doc/884704671.html,API-2得到MAC (MSDN推荐方法) #include //#include #include #include #include typedef struct _ASTA T_ { ADAPTER_STA TUS adapt; NAME_BUFFER NameBuff [30]; }ASTA T, * PASTA T; ASTA T Adapter; int main (void)

Linux网络服务器配置习题解析

Linux网络服务器配置习题解析选择题 11、在运行Linux操作系统的服务器上,管理员使用BIND配置了域名系统服务,请问主配置文件是(C)。 A:named.ca B:named.local C:named.conf D:rndc.key 试题解析:BIND的主配置文件(/var/named/chroot/etc/named.conf)中有BIND的全局设置 12、某公司使用Linux系统搭建了Samba文件服务器,在帐号为gtuser 的员工出差期间为了避免该帐号被其它员工冒用,需要临时将其禁用可以使用以下(B)命令。 A:smbpasswd -a gtuser B:smbpasswd -d gtuser C:smbpasswd -e gtuser D:smbpasswd -x gtuser 试题解析: 禁用samba用户:smbpasswd -d用户名 启用samba用户:smbpasswd-e 用户名 删除samba用户:smbpasswd -x 用户名 13、在Linux系统中,小明用系统默认的vsftpd架设FTP服务器,他新建了一个名为gtuser的用户,然后他修改/etc/vsftpd/vsftpd.conf文件,加入下面两行,并且把gtuser用户加入到了/etc/https://www.wendangku.net/doc/884704671.html,er_list 文件中,请问gtuser用户在客户端登录结果会怎样(A)。 userlist_enable=YES userlist_deny=NO A:允许登录 B:拒绝登录 C:不确定 D:以上都对

试题解析:userlist_enable=YES/NO是否启用https://www.wendangku.net/doc/884704671.html,er_list文件。userlist_deny=YES/NO(YES)决定https://www.wendangku.net/doc/884704671.html,er_list文件中的用户是否能够访问FTP服务器。若设置为YES,则https://www.wendangku.net/doc/884704671.html,er_list文件中的用户不允许访问FTP,若设置为NO,则只有https://www.wendangku.net/doc/884704671.html,er_list文件中的用户才能访问FTP。 14、公司有一台对外提供WWW服务的主机,为了防止外部对它的攻击现在想要设置防火墙使它只接受外部的WWW访问,其它的外部连接一律拒绝,可能的设置步骤包括: 1、iptables -A INPUT-p tcp -j DROP 2、iptables -A INPUT-p tcp --dport 80 -j ACCEPT 3、iptables -F 4、iptables -P INPUT DROP 请在下列选项中找出正确的设置步骤组合(D)。 A:1-2-3-4 B:2-4-3 C:3-1-2 D:3-4-2 试题解析: 正确步骤为 ①清除所有规则来暂时停止防火墙:iptables–F ②本机默认不接受任何连接,除非在INPUT链上再设置接收的规则:iptables -P INPUT DROP ③打开WEB服务端口的TCP协议:iptables -A INPUT-p tcp --dport 80 -j ACCEPT 15、在LINUX系统中,使用BIND配置DNS服务器,若需要设置192.168.10.0/24网段的反向区域以下(C)是该反向域名的正确表示方式。 A:192.168.10.in-addr.arpa B:192.168.10.0.in-addr.arpa C:10.168.192.in-addr.arpa D:0.10.168.192.in-addr.arpa 试题解析:添加反向区域时,网络号要反过来写(网络号是IP地址与

MAC地址查询

众所周知,mac地址电脑的唯一标识,就如同我们身份证一样。虽然mac地址用到的不多,但是各位有必要了解一下电脑mac地址查询方法,万一要用到了呢!本文我们就来为大家详解一下电脑mac地址查询两种方法。 公司在进行局域网管理时,都会用到mac地址。但是对非技术人员来说,电脑mac地址查询方法是怎样的呢,下面就随我们来瞧瞧吧。 电脑mac地址查询方法一:在“开始”菜单或者同时按下win+R快捷键打开“运行”窗口(图1),在运行窗口内输入“cmd”命令,点击确定之后就会出现“C:WINDOWSsystem32cmd.exe”程序框,然后在光标处输入ipconfig/all命令,敲击键盘上的enter键,这时候你就能看到有关网卡的全部信息,其中就包括电脑mac地址。以我们电脑为例,图中的physicaladdress 即是电脑的mac地址,为00-FF-45-F2-2A-D6。

电脑mac地址查询方法二:点击电脑桌面的“网上邻居”,点击鼠标右键,找到“属性”选项,单击打开,就能看到“网络连接”页面。双击本地连接,即会出现本地连接状态属性卡,单击“支持”,这时候你就会在连接状态内看到“默认网关”下方有“详细信息”(图3),单击进去,第一栏的实际地址即是电脑的mac地址(图4)。 Win7系统电脑mac地址查询方法介绍 上面我们主要是为大家介绍了xp系统中的电脑mac地址查询方法,那么Win7系统怎么查询呢。其实操作是很类似的,具体如下:单击电脑桌面上的“网络邻居”,打开之后就能看到左侧的“查看网络连接”点击进入,右键点击本地连接找到“状态”并打开,然后你就能看到同上述查询方法内一致的“本地连接状态”属性卡,单击详细信息,就可清楚的看到电脑的mac地址了。当然此外,你还可以利用在运行程度中输入cmd的方式进行查询。由此来看,不管winxp还是win7系统查询mac地址的方法都是很类似的。 大家是不是已经通过上面我们的介绍了解了电脑mac地址查询方法了呢,详细的步骤大家不妨立即就试一试,实用的技能轻松掌握!mac地址在我们日常的工作中还是会经常遇到的,我们建议大家最好将文章收藏起来,以后用的时候翻出来就能派上用场。

机器码获取生成注册码

机器码获取生成注册码 通过获取硬盘的物理序列号和网卡MAC地址,为您的程序提供了获取唯一的机器码,你可以根据此码,生成自己产品注册码,有效防止软件的盗版可以自己根据获取到的硬盘序列号和网卡MAC地址进行一定的加密算法生成,唯一的机器码. 给自己的软件制作注册码.从今天起,您开发的的任何软件如果您愿意都可以为之加密 --为您的软件制作一款注册机!当您看完这篇文章时, 您就可以理直气壮的告诉您的用户 : "喂, 想用我的软件是吧 ? 掏钱!". 呵呵, 这当然只是给自己壮胆的话, 现在连万能注册机都有了, 人家还怕啥 ? 不过只要您想想微软, 人家再牛B的加密技术都会被国人"鄙视"? 但人家不也在中国大把大把的捞钱吗?OK, 不扯了, 我们进入正题.同一般的软件注册一样, 我们这里的注册是这样进行的: 1. 首先根据用户的硬件信息生成24位的机器码 -- 相当于种子,用于生成随机数 2. 采用注册机根据特征数字生成一个24位注册码 -- 相当于伪随机数生成器, 输出长度自己定, 最后用一个格式化函数,将随机数映射到ASCII字符集合 3. 用户输入注册码注册成功 假设客户很喜欢您的软件, 也假设他没有破解, 他需要通过以下方式向您取得注册码: (1).如果他能上网, 他需要把机器码用Email发给您; (2).如果他不能上网, 他可以把机器码用手机短信的方式发给您. (3).如果他没有手机, 他可以带着机器码然后坐火车到您的办公室想您要一个注册码. --第3条只是为了让您看帖子的时候别太枯燥了, 抱歉. 现在, 您拿到了客户的机器码后, 如果您同时也收到了他汇的钱, 呵呵, 好像给软件加密就是为了要钱吧? 那么您就可以用客户的机器码生成一个唯一的注册码再用同样的方式给用户, 最后, 用户输入注册码即可! 需要强调的是客户机器的硬件信息获取方式是有很多种选择的. 这里我们选择最放心的两个硬件: CUP的序列号和硬盘的卷标号. 好了,下面您就可以一步一步制作一款软件注册机了. 步骤一: 获得CUP序列号和硬盘序列号的实现代码如下:Java代码 #region 获取cpu的序列号 public string getCpu() { string strCpu = null; ManagementClass myCpu = new ManagementClass("win32_Processor");

linux下安装编译网卡驱动的方法

linux下安装编译网卡驱动的方法 你还在为不知道linux下安装编译网卡驱动的方法而不知所措么?下面来是小编为大家收集的linux下安装编译网卡驱动的方法,欢迎大家阅读: linux下安装编译网卡驱动的方法 安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空。 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网上找的资料进行整理,并实际操作的过程,仅供借鉴。 一.检测linux系统内核版本和网卡类型,相关命令如下: uname -r 查看linux内核版本(uname -a 可显示所有信息)

lsmod 设备加载情况 ls /usr/share/hwdata 查看硬件设备 lspci 查看pci网卡设备ethernet controller 厂商和型号,modprobe **** ****为网卡型号,例如modprobe RTL8101E ,如果出错,说明模块不存在,该型号不识别 我在这一步时查找不到网卡型号,无奈只能由同时采购的其他相同型号预装win7的电脑下查看网卡型号,是个笨办法,嘿嘿…… 找到网卡型号后就到驱动之家下载了相应网卡的linux驱动,这些需要根据自己的实际情况下载,不多说了,重点是后面。 二.下载网卡驱动 Intel_e1000e-1.9.5.zip 为我下载的所需的网卡驱动,这个在linux下需自己编译. 三.安装网卡驱动

1.检测编译需要用到内核的源代码包和编译程序gcc。所以如果没有的话,要先装。 [root@localhost ~]# rpm -qa|grep kernel kernel-xen-2.6.18-8.el5 kernel-xen-devel-2.6.18-8.el5 kernel-headers-2.6.18-8.el5 [root@localhost ~]# rpm -qa|grep gcc gcc-c++-4.1.1-52.el5 libgcc-4.1.1-52.el5 gcc-4.1.1-52.el5 gcc-gfortran-4.1.1-52.el5 如果缺少kernel-xen-devel-2.6.18-8.el5,可以去安装光

利用MAC地址查找被盗笔记本电脑

利用MAC地址查找被盗笔记本电脑 随着现代社会经济的发展,涉及电脑被盗的案件也日益增多,由于电脑 体积小、移动性强、物理特征不明显等因素,给我们的侦查破案带来了不小的难度。下面简单介绍一下MAC地址在刑事侦查中的作用及方法。首先了解一什么是下MAC。通俗点说MAC就是电脑上网用的网卡, MAC 地址就是在媒体接入层上使用的地址,也就是网卡的物理地址。现在的Mac地址一般都采用6字节48bit(在早期还有2字节16bit的Mac地址)。每块网卡在生产出来后,除了基本的功能外,都有一个唯一的编号标识自己。全世界所有的网卡都有自己的唯一标号,是不会重复的。这个MAC地址是由48位2进制数组成的,通常分成6段,用16进制表示就是类似00-D0-09-A1-D7-B7的一串字符。 其次谈谈MAC在刑事侦查中的作用。由于网卡和身份证一样具有唯一性,所以我们就可以利用它来查找被盗电脑的线索,从技术上来说,只要被盗的电脑有在上网使用,就可以通过技术手段扫描到使用者的IP地址、电话及详细资料,然后按图索骥找到嫌疑人。 在明白了MAC的原理和作用后,我们来了解一下如何获取MAC的地址。 一、一般可以从电脑的外包装,装箱单,说明书,保修卡等上面找到MAC地址。

二、可以从电脑上找,有些会贴在电脑上,没贴的也能通过在运行中输入CMD到DOS状态输入IPCONFIG/ALL得到。但一般情况下事主都不会刻意的记录这个,而且如果电脑被盗后也无法查询。 三、现在的电脑用户绝大部分采用ADSL上网的,那么网络服务商就会给我们提供一个上网账号和密码。我们就可以用这个账号和密码通过服务商倒查出我们上网用的MAC地址。 四、现代家庭中很多人拥有2台以上电脑的,这样就需要使用路由器,在电脑使用的时候路由器会纪录下每台电脑的MAC地址。 五、虽然现在的电脑品牌机较多,但是生产和销售的厂家都会纪录下每台电脑的机器码、MAC地址等。我们就可以用购买时的发票等资料通过他们倒查出MAC的地址。 六、通过网监部门查找MAC地址。 与大家分享,希望尽快建立被盗抢电脑MAC地址库,并接入运营商查询接口。 具体的方法是:一般的手提电脑公司都有一个被盗系统,在电脑被盗后将该电脑的条形码提供给该电脑公司,电脑公司会将该条形码输入其公司全国联网的报警系统,嫌疑人如果带着电脑到售后去维修,在维修时会自动报警。从而可以找回该电脑,不过嫌疑人要是不去该电脑公司的每台电脑只要接入网络,必然会在网络提供商处留下记录,这个记录中

获取以太网卡的MAC地址(附源代码)

2、C#编程要点 Microsoft提供的WMI(Windows Management Instrumentation)中提供了一个Win32_NetworkAdapterConfiguration的类,定义了获取MAC地址的方法,因此只要构造一个定义为Win32_NetworkAdapter Configuration的WMI类,从中取出MAC地址的值即可。在C#中管理WMI主要使用ManagementClass类。编写程序过程要注意以下两个要点。 1)、命名空间的添加 由于System.Management的动态链接库不是C#中默认加载的,所以要添加System.Management的命名空间前要添加System.Management.dll链接库。依次选择:“项目”→“添加引用”→“.NET”菜单栏,加入System.Management。确认添加了动态链接库后添加命名空间: usingSystem.Management; 2)、MAC地址的获取 根据前面的介绍,要构造一个ManagementClass类管理定义为Win32_NetworkAdapter Configuration的WMI类,然后将ManagementClass类中的所有变量的值返回给属于ManagementObjectCollection类的变量,ManagementObjectCollection类用于表示WMI实例的不同集合,将不同集合中的各个MAC地址读出,就可获得多网卡的MAC地址。 构造ManagementClass,函数原型如下: public ManagementClass(string path); 参数:path表示WMI的路径。 要返回ManagementClass所有实例的集合,使用GetInstances(),函数原型如下: public ManagementObjectCollectionGetInstances(); 例如:获得本机上多网卡的MAC地址: ManagementClass mc; //定义一个ManagementClass类 //将ManagementClass类变量定义为Win32_NetworkAdapter Configuration,以便获得//网络信息 mc=new ManagementClass(” Win32_NetworkAdapterConfiguration”); //使用ManagementObjectCollection记录mc中的所有信息,包括多个网卡信息 ManagementObjectCollectionmoc=mc. GetInstances(); //取得ManagementObjectCollection中的不同网卡配置信息,判断如果该网卡可用就//去读取MAC地址 foreach(ManagementObjectmo in moc) { if(mo[“IPEnabled”].ToString()= =”True”) Console.WriteLine(”MAC address”+mo[“MacAddress”].ToString()); } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Management; namespace ConsoleApplication3

通过客户端ip获取mac地址

public class MacUtils { /** * 通过ip获取mac地址 * @param ipAddress 客户端ip * @return mac地址 */ public static String getMACAddressByIp(String ipAddress) { String str = "", macAddress = ""; try { Process pp = Runtime.getRuntime().exec("arp -a " + ipAddress); InputStreamReader ir = new InputStreamReader(pp.getInputStream(), "gbk"); BufferedReader br = new BufferedReader(ir); while ((str = br.readLine()) != null) { if (str.indexOf(ipAddress) > 1) { str = str.trim(); macAddress = str.substring(str.indexOf(" "), str.length()); macAddress = macAddress.trim(); macAddress = macAddress.substring(0,17); break; } } pp.destroy(); br.close(); ir.close(); } catch (Exception ex) { return "Can't Get MAC Address!"; }

VC++获取网卡MAC、硬盘序列号、CPU+ID、BIOS编号

VC++获取网卡MAC、硬盘序列号、CPU ID、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; } }

Linux系统如何更改网卡的MAC物理地址

Linux系统如何更改网卡的MAC物理地址 Linux系统如何更改网卡的MAC物理地址 有些地方是把网络地址和网卡物理地址绑定的,当换了网卡或其它电脑时可能会上不了网,下面介绍更改物理地址(MACAddress)的方法。分为临时更改和长期更改两种情况,两种方法均不实际改变网卡的真实属性。 临时更改 所谓临时更改,是指在重新启动系统后就失效的短期更改方法,较简单。 Linux网卡的物理地址设置是在网络设置时进行的。 首先确定你在使用root用户。假设对eth0进行设置。 先网卡“关闭” #ifconfigeth0down 更换物理地址,把粗体部分更换为你要换的MAC地址: #ifconfigeth0hwetherAA:BB:CC:DD:EE:FF 启用eth0。 #ifconfigeth0up 如果需要,请自行添加加入路由的'命令。 注意: 如果还要设置IP等其它信息,一定要把hwether物理地址紧跟在设备名(如eth0)后面。 长期更改 这里指重启后仍能保留更改。需要文本编辑器配置文件。

Debian(Ubuntu很可能也在此列) 编辑/etc/network/interfaces,找到与eth0有关的地方,修改到形如: allow-hotplugeth0 ifaceeth0inetdhcp #ifaceeth0inetstatic #address1.1.1.6 #netmask255.255.255.0 #gateway1.1.1.1 hwaddressether00:AA:BB:CC:DD:EE 注释的部分是静态IP的写法,当前的未注释的是动态IP的写法。详细信息请参见Debian网络设置 Archlinux或Gentoo 编辑/etc/rc.conf(Archlinux)或/etc/conf.d/net(Gentoo),在eth0配置的字符串中,在IP地址的前面加入 hwether00:AA:BB:CC:DD:EE。Gentoo和Archlinux的网络设置,请 参阅发行版的相关文档。 Fedora或Redhat 编辑/etc/sysconfig/network-scripts/ifcfg-eth0(如需要请 修改eth0到你的网卡编号),加入或修改 HWADDR=AA:BB:CC:DD:EE:FF 即可。

MAC地址查询

各操作系统查询网卡MAC地址方法 MAC地址是网卡的物理地址,例如:00-19-21-C4-BA-DB。MAC地址就是网卡的身份证号码,具有全球唯一性。 Windows XP系统查询MAC地址方法: 点击桌面左下角的“开始”按钮——“运行”——输入cmd后点击“确定”(如图1)弹出一个窗口,输入ipconfig/all,然后回车(如图2)。有线网卡MAC:“Ethernet adapter 本地连接”中的“Physical Address”,Physical Address后面的内容就是有线网卡的MAC地址,例如图2中的MAC地址是00-19-21-C4-BA-DB;无线网卡MAC:“Ethernet adapter无线网络连接”中的“Physical Address”,Physical Address后面的内容就是无线网卡的MAC地址。 图1

图2 Windows VISTA、Windows 7系统查询MAC地址方法: 点击桌面左下角的“开始”按钮——在“所有程序”下有一个文本框,在里面输入cmd,然后按回车键打开一个窗口,在此窗口中输入ipconfig/all,按回车键,找到“以太网适配器本地连接”中的“物理地址”,物理地址后面是有线网卡的MAC地址;找到“无线局域网适配器无线网络连接”中的“物理地址”,物理地址后面就是无线网卡的MAC地址。 苹果系统查询MAC地址方法 点击桌面左上角的“苹果”图标,选择“系统偏好设置”,这时会打开一个窗口,点击“网络”,在打开的窗口中点击“以太网”——“高级”——“以太网”,找到“以太网ID”,以太网ID后面的内容就是有线网卡的MAC地址。点击取消回到之前的窗口,点击“Airport”——“高级”——“AirPort ID”,AirPort ID后面就是无线网卡的MAC地址。

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 int getcpuid (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 的声明有

JAVA实现获取MAC地址

用纯JAVA语言编程读取MAC地址的实现 本文介绍如何在WindowXP/NT/2000环境中,编写纯Java程序,执行外部命令IPCONFIG,并通过分析该命令的输入流而获得本机的MAC地址的编程方法。 1 引言 用Java编写的程序,可以很方便地运行在各种平台的环境。但在实际的开发过程中,有时不得不涉及一些底层的编程。比如为了防止软件盗用,我们希望软件只能在指定计算机上运行,所以需要程序读取该机区分于其它计算机的硬件特征,如MAC地址等。作为一种跨平台语言,给Java语言提出了挑战。本文正是针对该问题,提出一种直接用纯Java语言,读去MAC地址的编程方法。 我们知道,在每一个Java应用程序中都存在着一个与其运行环境相联系的Runtime对象。该对象可执行外部命令、查可用内存等。而多数操作系统都提供有查询该机MAC地址的命令。如在Microsoft的操作系统中,命令IPCONFIG等。本文的思路是在程序中运行一个外部命令,将该命令的运行结果作为一个流(Stream),读取并分析之,进而实现获取MAC地址的目的。 2 Runtime类 在每一个Java 应用程序里面,都有惟一的一个Runtime 对象。通过这个Runtime 对象,应用程序可以与其运行环境发生相互作用。 一般不实例化一个Runtime对象。但是可以通过调用静态方法Runtime.getRuntime( )而获得对当前Runtime对象的引用。Runtime 类的大多数方法是实例方法。 Runtime 对象的作用主要有:执行外部命令;返回空闲内存;运行垃圾回收器;加载动态库等。 Applets和其他不可信赖的程序由于没有引起一个安全异常(SecurityException)而不能调用任何的Runtime方法。 下面的例子演示了怎样使用Runtime 对象运行一个外部命令。 以下是引用片段: : Process process = Runtime.getRuntime().exec("cmd.exe /c dir"); process.waitFor(); : Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。通过Process可以控制该子进程的执行或获取该子进程的信息。第二条语句的目的是等待子进程完成后再往下执行。

VMware下修改Linux MAC地址的方法

VMware下修改Linux MAC地址的方法VMware下修改Linux MAC地址有三种方法。 方法一:直接修改Linux系统里相关rc.local文件MAC值即可。 方法二:修改虚拟机的*.vmx文件,这种方法最值得推荐,因为这样就类似于重新“烧录”了VMware虚拟机的“物理网卡ROM”。 具体操作方法分两种情况: 第一种情况: ethernet0.addressType="static" ethernet0.Address="00:50:56:0A:0B:0C" "static"说明VM的"物理网卡"的MAC是静态设定的,你可以改成一个以005056开头的另外一个MAC即可。改完启动VM时如果问你 SSID的话,选择“KeepAlways”。 第二种情况: ethernet0.addressType="generated" uuid.location="564ddcf1ffaa75ea-f1b9ee0d689c655c" uuid.bios="564ded23138c9691-7c68b2098baabbcc" ethernet0.generatedAddress="00:0c:29:aa:bb:cc" "generated"说明VM的"物理网卡"的MAC是系统随机动态设定的,你可以通过将uuid.bios后六位及 ethernet0.generatedAddress后六位改成你想要改成的以000c29开头的MAC即可。 方法三:修改Linux系统里相关/etc/sysconfig/network-scripts/ifcfg-eth0文件MAC值。

vi/etc/sysconfig/network-scripts/ifcfg-eth0 MACADDR=xx:xx:xx:xx:xx:xx :wq保存退出 reboot 可见在VMware下修改Linux MAC地址也并不是很复杂。 转载请注明:李勇 @ 卡饭学院杀毒软件免费杀毒软件时间:2010-06-27 18:13 卡饭,中国计算机安全软件交流学习第一选择;

Linux如何在虚拟机里更改MAC地址

Linux如何在虚拟机里更改MAC地址 导读:MAC地址是网卡的物理地址,用户们可以对其进行修改。今天小编要给大家介绍的就是在VMware虚拟机中修改Linux MAC地址的方法,希望对大家有所帮助。 修改方法: 方法一: 这个方法最直接简单有效,修改Linux系统里相关rc.local文件MAC值即可。 方法二: 修改虚拟机的*.vmx文件,这种方法最值得推荐,因为这样就类似于重新“烧录”了VMware虚拟机的“物理网卡ROM”。方法是: 分两种情况: 第一种: ethernet0.addressType=“static” ethernet0.Address=“00:50:56:0A:0B:0C” “static”说明VM的“物理网卡”的MAC是静态设定的,你可以改成一个以005056开头的另外一个MAC即可。改完启动VM时如果问你SSID的话,选择“KeepAlways”。 第二种: ethernet0.addressType=“generated” uuid.location=“564ddcf1ffaa75ea-f1b9ee0d689c655c” uuid.bios=“564ded23138c9691-7c68b2098baabbcc” ethernet0.generatedAddress=“00:0c:29:aa:bb:cc”

“generated”说明VM的“物理网卡”的MAC是系统随机动态设定的,你可以通过将uuid.bios后六位及ethernet0.generatedAddress后六位改成你想要改成的以000c29开头的MAC即可。 方法三: 修改Linux系统里相关/etc/sysconfig/network-scripts/ifcfg-eth0文件MAC值。 vi/etc/sysconfig/network-scripts/ifcfg-eth0 MACADDR=xx:xx:xx:xx:xx:xx :wq保存退出 reboot 这就是在VMware虚拟机中修改Linux MAC地址的三种方法了,有需要的用户可以尝试一下这三种修改方法。

Linux网络服务器配置习题解析

Linux网络服务器配置习题解析 一、选择题 1、在运行Linux操作系统的服务器上,管理员使用BIND配置了域名 系统服务,请问主配置文件是(C)。 A:B: C:D: 试题解析: 2、某公司使用Linux系统搭建了Samba文件服务器,在帐号为gtuser 的员工出差期间为了避免该帐号被其它员工冒用,需要临时将其禁用可以使用以下(B)命令。 A:smbpasswd -a gtuser???? B:smbpasswd -d gtuser C:smbpasswd -e gtuser???? D:smbpasswd -x gtuser 试题解析: 禁用samba用户:smbpasswd -d用户名 启用samba用户:smbpasswd -e 用户名 删除samba用户:smbpasswd -x 用户名 3、在Linux系统中,小明用系统默认的vsftpd架设FTP服务器,他 新建了一个名为gtuser的用户,,加入下面两行,并且把gtuser,请问gtuser用户在客户端登录结果会怎样(A)。 userlist_enable = YES userlist_deny = NO A:允许登录 B:拒绝登录 C:不确定 D:以上都对 试题解析: userlist_enable=YES/NO

4、公司有一台对外提供WWW服务的主机,为了防止外部对它的攻击现在想要设置防火墙使它只接受外部的WWW访问,其它的外部连接一律拒绝,可能的设置步骤包括: 5、1、iptables -A INPUT-p tcp -j DROP 6、2、iptables -A INPUT-p tcp --dport 80 -j ACCEPT 7、3、iptables -F 8、4、iptables -P INPUT DROP 请在下列选项中找出正确的设置步骤组合(D)。 A:1-2-3-4 B:2-4-3 C:3-1-2 D:3-4-2 试题解析: 正确步骤为 ①清除所有规则来暂时停止防火墙:iptables –F ②本机默认不接受任何连接,除非在INPUT链上再设置接收的规则:iptables -P INPUT DROP ③打开WEB服务端口的TCP协议:iptables -A INPUT-p tcp --dport 80 -j ACCEPT 9、C)是该反向域名的正确表示方式。 A: B: C: D: 试题解析:添加反向区域时,网络号要反过来写(网络号是IP地址与子网掩码进行与操作后的结果)。例如,本题配置的网络号这个网段,那么它的反向区域是 10、在Linux系统中使用BIND 配置DNS服务器若需要在区域文件中指定该域的邮件服务器应该添加(B)记录。

取得系统中网卡MAC地址的三种方法

取得系统中网卡MAC地址的三种方法 第一种方法使用Microsoft的Netbios API。这是一套通过Winsock提供底层网络支持的命令。使用Netbios的最大缺点是您必须在系统中安装了Netbios 服务(如果您在windows网络中启用了文件共享的话,这就不是问题了)。除此此 外,这种方法又快又准确。 Netbios API只包括了一个函数,就叫做Netbios。这个函数使用网络控制块(network control block)结构作为参数,这个结构告诉函数要做什么。结构的定义如下: typedef struct _NCB { UCHAR ncb_command; UCHAR ncb_retcode; UCHAR ncb_lsn; UCHAR ncb_num; PUCHAR ncb_buffer; WORD ncb_length; UCHAR ncb_callname[NCBNAMSZ]; UCHAR ncb_name[NCBNAMSZ]; UCHAR ncb_rto; UCHAR ncb_sto; void (CALLBACK *ncb_post) (struct _NCB *); UCHAR ncb_lana_num; UCHAR ncb_cmd_cplt; #ifdef _WIN64 UCHAR ncb_reserve[18]; #else UCHAR ncb_reserve[10]; #endif HANDLE ncb_event; } NCB, *PNCB; 重点在于ncb_command 成员。这个成员告诉Netbios该作什么。我们使用三个命令来探测MAC地址。他们在MSDN的定义如下: 命令描述: NCBENUM Windows NT/2000: 列举系统中网卡的数量。使用此命令后,ncb_buffer 成员指向由LANA_ENUM结构填充的缓冲区。 NCBENUM 不是标准的 NetBIOS 3.0 命令。 NCBRESET 重置网卡。网卡在接受新的NCB命令之前必须重置。 NCBASTAT 接受本地或远程接口卡的状态。使用此命令后,ncb_buffer成员指向由ADAPTER_STATUS结构填充的缓冲区,随后是NAME_BUFFER结构的数组。

NET获取硬盘序列号的几个方法

最近作软件注册,收集了很多.NET相关的获取硬盘物理序列号的方法,主要分为使用WMI方式和API方式。但这些方法均可能有问题。 1,使用WMI方式,有的机器根本取不到硬盘序列号,有的方式在Vista下面会报错。 常用的使用WMI的方式主要有下面一些方式: class HardDrive { private string model = null; private string type = null; private string serialNo = null; public string Model { get {return model;} set {model = value;} } public string Type { get {return type;} set {type = value;} } public string SerialNo { get {return serialNo;} set {serialNo = value;} } } class TestProgram { ///

/// The main entry point for the application. /// [STAThread] static void Main(string[] args) { //在Vista下面失败 ArrayList hdCollection = new ArrayList(); ManagementObjectSearcher searcher = new

ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"); foreach(ManagementObject wmi_HD in searcher.Get()) { HardDrive hd = new HardDrive(); hd.Model = wmi_HD["Model"].ToString(); hd.Type = wmi_HD["InterfaceType"].ToString(); hdCollection.Add(hd); } searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia"); int i = 0; foreach(ManagementObject wmi_HD in searcher.Get()) { // get the hard drive from collection // using index HardDrive hd = (HardDrive)hdCollection[i]; // get the hardware serial no. if (wmi_HD["SerialNumber"] == null) hd.SerialNo = "None"; else hd.SerialNo = wmi_HD["SerialNumber"].ToString(); ++i; } // Display available hard drives foreach(HardDrive hd in hdCollection) { Console.WriteLine("Model\t\t: " + hd.Model); Console.WriteLine("Type\t\t: " + hd.Type); Console.WriteLine("Serial No.\t: " + hd.SerialNo); Console.WriteLine(); } // Pause application Console.WriteLine("Press [Enter] to exit..."); Console.ReadLine(); } }

相关文档
相关文档 最新文档