用python查找統(tǒng)一局域網(wǎng)下ip對(duì)應(yīng)的mac地址
MAC地址也叫物理地址、硬件地址,由網(wǎng)絡(luò)設(shè)備制造商生產(chǎn)時(shí)燒錄在網(wǎng)卡(Network lnterface Card)的EPROM(一種閃存芯片,通常可以通過程序擦寫)。IP地址與MAC地址在計(jì)算機(jī)里都是以二進(jìn)制表示的,IP地址是32位的,而MAC地址則是48位的 [3] 。
MAC地址的長(zhǎng)度為48位(6個(gè)字節(jié)),通常表示為12個(gè)16進(jìn)制數(shù),如:00-16-EA-AE-3C-40就是一個(gè)MAC地址,其中前3個(gè)字節(jié),16進(jìn)制數(shù)00-16-EA代表網(wǎng)絡(luò)硬件制造商的編號(hào),它由IEEE(電氣與電子工程師協(xié)會(huì))分配,而后3個(gè)字節(jié),16進(jìn)制數(shù)AE-3C-40代表該制造商所制造的某個(gè)網(wǎng)絡(luò)產(chǎn)品(如網(wǎng)卡)的系列號(hào)。只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地說(shuō),MAC地址就如同身份證上的身份證號(hào)碼,具有唯一性
我們可以編寫如下python代碼來(lái)查詢
# arp掃描,定義一個(gè)函數(shù),發(fā)送兩層的arp包,請(qǐng)求同一局域網(wǎng)內(nèi)其他IP地址的mac地址。 from scapy.all import * import uuid,socket # 獲取本機(jī)的IP地址。 def get_ip_address(): # 獲取本機(jī)電腦名 myname = socket.getfqdn(socket.gethostname()) # 獲取本機(jī)ip myaddr = socket.gethostbyname(myname) return myaddr # 獲取本機(jī)的mac地址。 def get_mac_address(): mac = uuid.UUID(int=uuid.getnode()).hex[-12:] return ":".join([mac[e:e + 2] for e in range(0, 11, 2)]) # arp掃描,獲取統(tǒng)一局域網(wǎng)下的IP地址的mac地址。 def arp_scan(ip): # 獲取本機(jī)的mac地址。 local_mac = get_mac_address() # 獲取本機(jī)的ip地址。 local_ip = get_ip_address() # print(type(local_ip),type(local_mac)) # 分隔IP地址。 ip_split = ip.split('.') ip_list = [] # 進(jìn)行重新定義ip地址段。 for i in range(1,25): ip_list.append(ip_split[0] + '.' + ip_split[1] + '.' + ip_split[2] + '.' + str(i)) print(ip_list,local_ip,local_mac) # arp_result = srp(Ether(src = local_mac,dst = 'ff:ff:ff:ff:ff:ff')/ARP(op = 1,hw = '00:00:00:00:00:00',psrc = local_ip,pdst = ip_list),timeout = 1,verbose = False) # 構(gòu)造二層包,寫入以太網(wǎng)層,這里每一層包需要填什么字段,可以取scapy界面看一下。 arp_result = srp(Ether(src=local_mac, dst='ff:ff:ff:ff:ff:ff')/ARP(op=1, hwsrc=local_mac, hwdst='00:00:00:00:00:00',psrc=local_ip, pdst=ip_list), timeout=1,verbose=False) # 進(jìn)行解包操作。 mac_result = arp_result[0].res mac_list = [] # 找到對(duì)應(yīng)的IP地址和MAC地址。 for i in range(len(mac_result)): ip = mac_result[i][1][1].fields['psrc'] mac = mac_result[i][1][1].fields['hwsrc'] mac_list.append([ip,mac]) return mac_list if __name__ == "__main__": ip = '192.168.156.1' mac_list = arp_scan(ip) for i in range(len(mac_list)): print("IP地址:",mac_list[i][0],'MAC地址:',mac_list[i][1])
以上就是用python查找統(tǒng)一局域網(wǎng)下ip對(duì)應(yīng)的mac地址的詳細(xì)內(nèi)容,更多關(guān)于python 查找mac地址的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python+opencv 讀取文件夾下的所有圖像并批量保存ROI的方法
今天小編就為大家分享一篇python+opencv 讀取文件夾下的所有圖像并批量保存ROI的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-01-01python數(shù)據(jù)結(jié)構(gòu)輸入輸出及控制和異常
這篇文章主要介紹了python數(shù)據(jù)結(jié)構(gòu)輸入輸出及控制和異常,上一章節(jié)中我們介紹了python的基礎(chǔ)數(shù)據(jù)類型和集合數(shù)據(jù)類型,這章節(jié)給大家介紹一下python的輸入輸出、控制和異常,對(duì)數(shù)據(jù)類型感興趣的同學(xué)可以查看一下文章<BR>2021-12-12對(duì)Matlab中共軛、轉(zhuǎn)置和共軛裝置的區(qū)別說(shuō)明
這篇文章主要介紹了對(duì)Matlab中共軛、轉(zhuǎn)置和共軛裝置的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-05-05python設(shè)計(jì)微型小說(shuō)網(wǎng)站(基于Django+Bootstrap框架)
這篇文章主要介紹了python設(shè)計(jì)微型小說(shuō)網(wǎng)站(基于Django+Bootstrap框架),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢
這篇文章主要介紹了django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Python 3.10 的首個(gè) PEP 誕生,內(nèi)置類型 zip() 迎來(lái)新特性(推薦)
這篇文章主要介紹了Python 3.10 的首個(gè) PEP 誕生,內(nèi)置類型 zip() 迎來(lái)新特性,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Python實(shí)現(xiàn)壓縮與解壓gzip大文件的方法
這篇文章主要介紹了Python實(shí)現(xiàn)壓縮與解壓gzip大文件的方法,分析了Python針對(duì)壓縮成gzip文件及解壓gzip文件的方法,并給出了相應(yīng)的封裝類,需要的朋友可以參考下2016-09-09python實(shí)現(xiàn)批量移動(dòng)文件
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)批量移動(dòng)文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04