當前位置:首頁 » 編程語言 » 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,按確定;

‍‍
‍‍

熱點內容
啟動mongodb服務linux 發布:2024-04-26 16:38:37 瀏覽:552
525標軸選裝哪些配置 發布:2024-04-26 16:34:24 瀏覽:848
機械硬碟的存儲速度優於固態硬碟 發布:2024-04-26 16:02:13 瀏覽:117
訊捷壓縮器 發布:2024-04-26 16:02:08 瀏覽:268
安卓藍牙耳機丟了如何找回 發布:2024-04-26 15:36:13 瀏覽:540
win7最近打開文件夾 發布:2024-04-26 15:23:00 瀏覽:555
演算法筆談 發布:2024-04-26 15:14:34 瀏覽:284
技算計編程 發布:2024-04-26 14:43:42 瀏覽:140
開普票密碼區和備注是什麼意思 發布:2024-04-26 14:43:31 瀏覽:852
吃雞安卓和蘋果如何加好友 發布:2024-04-26 14:39:10 瀏覽:836