当前位置:首页 » 编程语言 » python获取mac地址

python获取mac地址

发布时间: 2022-09-24 13:05:35

A. 如何获取计算机的mac地址的代码

获取客户端IP及MAC地址,下边分为了C#后台获取的方法和前台Javascript(调用ActiveX)获取的方法

C#代码获取:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Runtime.InteropServices;
namespaceMyTest
{
publicpartialclassmac:System.Web.UI.Page
{
[DllImport("Iphlpapi.dll")]
privatestaticexternintSendARP(Int32dest,Int32host,refInt64mac,refInt32length);
[DllImport("Ws2_32.dll")]
privatestaticexternInt32inet_addr(stringip);

protectedvoidPage_Load(objectsender,EventArgse)
{
GetMac();
}
//获取客户端IP
privatestringGetClientIP()
{
stringresult=HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if(null==result||result==String.Empty)
{
result=HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
if(null==result||result==String.Empty)
{
result=HttpContext.Current.Request.UserHostAddress;
}
returnresult;
}

//获取MAC地址
privatevoidGetMac()
{
//在此处放置用户代码以初始化页面
try
{
stringuserip=Request.UserHostAddress;
stringstrClientIP=Request.UserHostAddress.ToString().Trim();
Int32ldest=inet_addr(strClientIP);//目的地的ip
Int32lhost=inet_addr("");//本地服务器的ip
Int64macinfo=newInt64();
Int32len=6;
intres=SendARP(ldest,0,refmacinfo,reflen);
stringmac_src=macinfo.ToString("X");
if(mac_src=="0")
{
if(userip=="127.0.0.1")
Response.Write("正在访问Localhost!");
else
Response.Write("欢迎来自IP为"+userip+"的朋友!"+"
");
return;
}
while(mac_src.Length<12)
{
mac_src=mac_src.Insert(0,"0");
}
stringmac_dest="";
for(inti=0;i<11;i++)
{
if(0==(i%2))
{
if(i==10)
{
mac_dest=mac_dest.Insert(0,mac_src.Substring(i,2));
}
else
{
mac_dest="-"+mac_dest.Insert(0,mac_src.Substring(i,2));
}
}
}
Response.Write("欢迎来自IP为"+userip+"
"+",MAC地址为"+mac_dest+"的朋友!"
+"
");
}
catch(Exceptionerr)
{
Response.Write(err.Message);
}

}
}
}

B. 如何使用python获取路由器所有mac

1. 安装pip
sudo easy_install pip

pip 安装成功就可以直接安装pil或者pillow

2. 通过命令pip install pil

pip install Pil
Downloading/unpacking Pil
Could not find any downloads that satisfy the requirement Pil
Some externally hosted files were ignored (use --allow-external Pil to allow).
Cleaning up...
No distributions at all found for Pil
Storing debug log for failure in /Users/macbook/Library/Logs/pip.log

3. 所以就安装pillow
pip install --use-wheel Pillow
Downloading/unpacking Pillow
Downloading Pillow-2.4.0.zip (6.5MB): 5.0MB downloaded
Cleaning up...

弄了会别的回来发现还没有下载完,这叫一个慢呀,于是放弃

C. 如何获取本机MAC地址 和 IP

1. 利用UUID获取
在Windows操作系统下,以Client-Sever模式进行通信时,运行时间库为了区分每个接口,需要为个接口建立一个UUID(Universally Unique Identifiers),在Windows95/98版本下,UUID的创建是通过调用函数UuidCreate()完成的,其中的第2至8字节包含了用户的MAC地址。因此,一种比较快的获取MAC地址的方法是创建一个UUID,然后分析UUID结构的第2至8字节,既可获取本机的MAC地址。示例程序如下:
static void GetMACaddress(void)
{
unsigned char MACData[6];
UUID uuid;
UuidCreate( &uuid ); // 要求操作系统创建一个新的UUID
for (int i=2; i<8; i++) // 获取本机MAC地址
MACData[i - 2] = uuid.Data4[i];
PrintMACaddress(MACData);
}
void PrintMACaddress(unsigned char MACData[])
{
printf("MAC Address: X-X-X-X-X-X\n",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}
这种方法只能用于Windows95/98操作系统。因为从安全的角度来看,在网络上散布本机的MAC地址存在着安全隐患,因此在Windows2000/xp操作系统中,微软对函数UuidCreate()进行了修正,使之在生成UUID时,不借助于本机的MAC地址。原来UuidCreate()完成的功能由函数UuidCreateSequential()完成。因此,如果在新的系统中采用这种方法,可用UuidCreateSequential()代替上述程序中的UuidCreate()函数。
另外,需要说明的是,这种方式只能用于单网卡主机。
2. 利用Net Bios协议获取
这种方法在Windows 95/98/Me/NT/2000/XP下都适用,不过它要求网卡必须安装正确,绑定了NetBios协议,并且机器正联接在一个运行正常的NetBios网络上。如果主机未接在网上,即使用网卡运行正常,运行下述代码,用户也不会得到任何信息。
static void GetMACaddress(void)
{
unsigned char MAC Data[8]; // 定义存放 MAC地址的缓冲区 (至少6字节)
WKSTA_TRANSPORT_INFO_0 *pwkti;
DWORD dwEntriesRead;
DWORD dwTotalEntries;
BYTE *pbBuffer;

// 通过 NetBIOS的枚举函数获取MAC地址
NET_API_STATUS dwStatus = NetWkstaTransportEnum(
NULL, // [input] 服务器名,0指本机
0, // [input] 0指函数返回指向WKSTA_TRANSPORT_INFO_0结构的指针
&pbBuffer, // [output] 指向缓冲区指针
MAX_PREFERRED_LENGTH, // [input] 缓冲区最大长度
&dwEntriesRead, // [output] 用于记录实际元素个数
&dwTotalEntries, //
NULL); //[input/output] 恢复句柄
assert(dwStatus == NERR_Success);
pwkti = (WKSTA_TRANSPORT_INFO_0 *)pbBuffer; // 指针类型转换
for(DWORD i=0; i< dwEntriesRead; i++)
{ // 读取并打印MAC地址
swscanf((wchar_t *)pwkti[i].wkti0_transport_address,
L"%2hx%2hx%2hx%2hx%2hx%2hx",
&MACData[0],
&MACData[1],
&MACData[2],
&MACData[3],
&MACData[4],
&MACData[5]);
PrintMACaddress(MACData);
}
// 释放缓冲区
dwStatus = NetApiBufferFree(pbBuffer);
assert(dwStatus == NERR_Success);
}
3. 利用GetAdaptersInfo()函数获取
此方法利用了Windows SDK 中的函数GetAdaptersInfo(),对于用户来讲,编程很简单,而且适用于Windows 95/98/Me/NT/XP等操作系统,并且不要求主机必须接在网络上,要求的只有一点,就是网卡在Windows下必须是可用的。同时,需要说明的是,GetAdaptersInfo()是一个功能非常强大的函数,它不但可以得到本机的MAC地址,而且可以得到许多其它相关信息。详细内容可参见MSDN中有关IP_ADAPTER_INFO结构的说明。
static void GetMACaddress(void)
{
IP_ADAPTER_INFO AdapterInfo[16]; // 定义网卡信息存贮区。
DWORD dwBufLen = sizeof(AdapterInfo);
DWORD dwStatus = GetAdaptersInfo(
AdapterInfo, // [output] 指向接收数据缓冲指针
&dwBufLen); // [input] 缓冲区大小
assert(dwStatus == ERROR_SUCCESS); // 此处是个trap,用来保证返回值有效
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo;
do {
PrintMACaddress(pAdapterInfo->Address); // 打印MAC地址
pAdapterInfo = pAdapterInfo->Next;
}
while(pAdapterInfo);
}
本程序中定义了一个长度为16的IP_ADAPTER_INFO结构类型的数组,因此用户主机安装的网卡数不能超过16块,这在一般情况下都是可以满足的,如果出现超过16块的情况,用户需修改此项设置,或采用动态申请存贮空间的方式解决。
4.结束语
以上三种方法均在Visual C++ 6.0、Windows2000 环境下编译通过并工作正常。需要说明的是,示例程序只是提供了一种解决问题的思路,从软件工程的角度来看,有些不尽人意的地方,读者可以根据自己的编程需要进行修改。
5,获取IP
void CheckIP(void)
{
WSADATA wsaData;
char name[155];
char *ip;
PHOSTENT hostinfo;
if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 ) {
if( gethostname ( name, sizeof(name)) == 0) {
if((hostinfo = gethostbyname(name)) != NULL) { //这些就是获得IP的函数
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
printf("%s\n",ip);
}
}
WSACleanup( );
} }

D. 怎么用python在arp缓存中获取mac地址‘

这个需要安装一个模块scapy

代码如下:


#!/usr/bin/envpython
#-*-coding:utf-8-*-
fromscapy.allimportsrp,Ether,ARP,conf
ipscan='192.168.1.1/24'
try:
ans,unans=srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=ipscan),timeout=2,verbose=False)
exceptException,e:
printstr(e)
else:
forsnd,rcvinans:
list_mac=rcv.sprintf("%Ether.src%-%ARP.psrc%")
printlist_mac

E. 为什么我用python做 获取 mac地址,获取的是我电脑上蓝牙的IP地址

上述代码和网络设备没有任何关系

F. 为什么用python获取mac地址会变动

首先声明,我本人还没有研究出来问题的究竟。此处只是写下我本人的一点小心得,大家一起进步。

因为我发现,使用uuid库得到的mac地址,总有最后一位不对。所以,我就查看了python官方的uuid文档,找到了问题的关键是调用UUID()的时候,会调用getnode()函数以得到物理地址。

这个是getnode()函数的定义:

我把它摘出来,考到下面。

def getnode(*, getters=None):
"""Get the hardware address as a 48-bit positive integer.

The first time this runs, it may launch a separate program, which could
be quite slow. If all attempts to obtain the hardware address fail, we
choose a random 48-bit number with its eighth bit set to 1 as recommended
in RFC 4122.
"""
global _node
if _node is not None:
return _node

if sys.platform == 'win32':
getters = _NODE_GETTERS_WIN32
else:
getters = _NODE_GETTERS_UNIX

for getter in getters + [_random_getnode]:
try:
_node = getter()
except:
continue
if (_node is not None) and (0 <= _node < (1 << 48)):
return _node
assert False, '_random_getnode() returned invalid value: {}'.format(_node)


我正在试图通过研究这个问题来试图研究。但同样,我觉得我们可以直接让python调用系统库,从而执行系统自带的命令:(类似于windows下cmd里面"ipconfig -all"命令,或者ubuntu下terminal中"ifconfig"命令)。实现物理地址。之后,根据“短时间内该机器的网卡不会出现过大的变动这个前提”,我们可以根据返回内容,切片出我们需要的部分即可。

G. 我想用python扫描局域网内的ip和mac地址,需要什么第三方库

MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的。MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。只要你不去更改自己的MAC地址,那么你的MAC地址在世界是惟一的。

MAC地址的作用

IP地址就如同一个职位,而MAC地址则好像是去应聘这个职位的人才,职位可以既可以让甲坐,也可以让乙坐,同样的道理一个节点的IP地址对于网卡是不做要求,基本上什么样的厂家都可以用,也就是说IP地址与MAC地址并不存在着绑定关系。本身有的计算机流动性就比较强,正如同人才可以给不同的单位干活的道理一样的,人才的流动性是比较强的。职位和人才的对应关系就有点像是IP地址与MAC地址的对应关系。比如,如果一个网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。当然MAC地址除了仅仅只有这个功能还是不够的,就拿人类社会与网络进行类比,通过类比,我们就可以发现其中的类浦?Γ??玫乩斫𨰿AC地址的作用。

无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。其实人类社会和网络也是类似的,试想在人际关系网络中,甲要捎个口信给丁,就会通过乙和丙中转一下,最后由丙 转告给丁。在网络中,这个口信就好比是一个网络中的一个数据包。数据包在传送过程中会不断询问相邻节点的MAC地址,这个过程就好比是人类社会的口信传送过程。相信通过这两个例子,我们就可以进一步理解MAC地址的作用。

与MAC地址相关的命令与软件

在人类社会社交中,我们认识一个人往往只会知道他的姓名,而身份证号码在一般的人际交往中会被忽略。同样在网络中,我们往往只会知道同事或者网友的IP地址,并不会去过多地关心对方的MAC地址。要成长为网络高手,我们可以使用一些方法去了解对方的MAC地址。在这里介绍两种常用的方法,在Windows 9x 中可用WinIPcfg获得,在Windows 2000/XP中可用IPconfig -all获得。

使用命令只能单条获得MAC地址,而且使用起来也是很麻烦的。对于网管人员,更希望有一款简单化操作的软件,我们可以利用“MAC扫描器”远程批量获取MAC地址。它是用于批量获取远程计算机网卡物理地址的一款网络管理软件。该软件运行于网络(局域网、Internet都可以)内的一台机器上,即可监控整个网络的连接情况,实时检测各用户的IP、MAC、主机名、用户名等并记录以供查询,可以由用户自己加以备注;能进行跨网段扫描,能和数据库中得IP和MAC地址进行比较,有修改IP的或使用虚假MAC地址的,都能报警。

更改MAC地址

H. 查看mac地址的方法

对于数量不多的几台机器,我们可以这样获取MAC地址:在Windows 98/Me中,依次单击“开始”→“运行” →输入“winipcfg”→回车。即可看到MAC地址。

在Windows 2000/XP中,依次单击“开始”→“运行”→输入“CMD”→回车→输入“ipconfig /all”→回车。即可看到MAC地址。

mac地址注意事项

Mac地址的6个字节,每一个字节都有它自己的作用,而按照以太网的协议,一般都是高字节先转,但是每个字节中的顺序是不同的。

Mac地址是一种物理地址,同时是一种闪存芯片,也就是说,在网络最开始的传输过程中,它是通过这个地址来识别用户的,在这个世界上,它也是独一无二的。我们可以这样来比喻,mac地址就和人们的身份证一样,是没有两个相同的号码的。

I. 如何利用NetworkInterface获取服务器MAC地址

复制代码 代码示例:private void ButtonIP_Click(object sender, System.EventArgs e)
{ System.Net.IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
if ( addressList.Length>1)
{ TextLIP.Text = addressList[0].ToString();
TextSIP.Text = addressList[1].ToString();}else{TextLIP.Text = addressList[0].ToString();
TextSIP.Text = "没有可用的连接";}}另一种获取服务器的IP地址与MAC地址的方法:
复制代码 代码示例:using System.Management;
string stringMAC = "";
string stringIP = "";
ManagementClass MC = new ManagementClass "Win32_NetworkAdapterConfiguration");
ManagementObjectCollection MOC= MC.GetInstances();
foreach(ManagementObject MO in MOC){if ((bool)MO["IPEnabled"] == true){stringMAC += MO["MACAddress"].ToString();
TextMAC.Text = stringMAC.ToString();
string[] IPAddresses = (string[]) MO["IPAddress"];
if(IPAddresses.Length > 0)
stringIP = IPAddresses[0];
TextIP.Text = stringIP.ToString();}}获取客户端本机的IP地址的方法:
复制代码 代码示例:using System.Net;
TextIP.Text=Page.Request.UserHostAddress;获取客户端本机的MAC地址刚复杂一些,需要调用两个API,用ARP协议获取,但也只能获取到同网段机器的MAC,对于跨网段的得利用IP扫描或cmd中nBTstat命令获取MAC地址。

J. 如何获取本机电脑的mac地址

1、同时按Win+R,弹出运行窗口。输入CMD,按确定;

‍‍
‍‍

热点内容
phpredis操作 发布:2024-05-06 22:56:24 浏览:583
查看qq加密相册软件 发布:2024-05-06 22:45:36 浏览:619
达芬奇密码电影解说讲的是什么 发布:2024-05-06 22:26:41 浏览:144
服务器提供什么服务 发布:2024-05-06 21:45:20 浏览:213
一汽桌面云服务器地址 发布:2024-05-06 21:19:23 浏览:996
北京市社保官网登录密码是什么 发布:2024-05-06 21:19:15 浏览:380
c语言数组的删除 发布:2024-05-06 20:52:33 浏览:398
机械战警用什么配置好看 发布:2024-05-06 20:27:12 浏览:435
win10添加python环境变量 发布:2024-05-06 20:27:12 浏览:313
并联臂算法 发布:2024-05-06 20:02:11 浏览:623