1. 程式人生 > 程式設計 >用python查詢統一區域網下ip對應的mac地址

用python查詢統一區域網下ip對應的mac地址

MAC地址也叫實體地址、硬體地址,由網路裝置製造商生產時燒錄在網絡卡(Network lnterface Card)的EPROM(一種快閃記憶體晶片,通常可以通過程式擦寫)。IP地址與MAC地址在計算機裡都是以二進位制表示的,IP地址是32位的,而MAC地址則是48位的 [3] 。

MAC地址的長度為48位(6個位元組),通常表示為12個16進位制數,如:00-16-EA-AE-3C-40就是一個MAC地址,其中前3個位元組,16進位制數00-16-EA代表網路硬體製造商的編號,它由IEEE(電氣與電子工程師協會)分配,而後3個位元組,16進位制數AE-3C-40代表該製造商所製造的某個網路產品(如網絡卡)的系列號。只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地說,MAC地址就如同身份證上的身份證號碼,具有唯一性

我們可以編寫如下python程式碼來查詢

# arp掃描,定義一個函式,傳送兩層的arp包,請求同一區域網內其他IP地址的mac地址。
from scapy.all import *
import uuid,socket
# 獲取本機的IP地址。
def get_ip_address():
  # 獲取本機電腦名
  myname = socket.getfqdn(socket.gethostname())
  # 獲取本機ip
  myaddr = socket.gethostbyname(myname)
  return myaddr
# 獲取本機的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掃描,獲取統一區域網下的IP地址的mac地址。
def arp_scan(ip):
  # 獲取本機的mac地址。
  local_mac = get_mac_address()
  # 獲取本機的ip地址。
  local_ip = get_ip_address()
  # print(type(local_ip),type(local_mac))
  # 分隔IP地址。
  ip_split = ip.split('.')
  ip_list = []
  # 進行重新定義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)
  # 構造二層包,寫入乙太網層,這裡每一層包需要填什麼欄位,可以取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)
  # 進行解包操作。
  mac_result = arp_result[0].res
  mac_list = []
  # 找到對應的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查詢統一區域網下ip對應的mac地址的詳細內容,更多關於python 查詢mac地址的資料請關注我們其它相關文章!