Python3 局域网ip获取mac,mac获取ip
一、所需Python库
from scapy.all import *
import socket
二、code
1.根据ip获取mac
向ip发送arp请求
def scanning():
inip = input("请输入ip:")
# 发送arp请求
arpPkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=inip)
res = srp1(arpPkt, timeout=1, verbose=0)
# 如果请求有响应则加入列表
if res:
if inip == res.psrc:
return "该ip的mac地址为:%s" % res.hwsrc
return "%s没有mac" % inip
2.根据mac获取ip
构造一个UDP包,拿取ip,获取网段
def get_network_segment():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 面向网络,UDP协议
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0] # 获取ip
ippre_list = ip.split(r".") # 切片
ippre_list.pop() # 去除最后一个元素
nets = '.'.join(ippre_list) # 拼接
except Exception:
nets = False
finally:
s.close()
return nets
向同个网段下每个ip发送arp请求
def scanning():
inpmac = input("请输入mac:")
nets = get_network_segment()
# 判断是否抓取到网段
if not nets:
return "无法识别网段,请确定计算机能否正常上网"
print("扫描网段中的ip中。。。")
for ipFix in range(1, 255 + 1):
ip = nets + "." + str(ipFix) # 拼接ip
# 发送arp请求
arpPkt = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=ip)
res = srp1(arpPkt, timeout=1, verbose=0)
# 如果请求有响应则加入列表
if res:
if inpmac == res.hwsrc:
return "该mac的ip地址为:%s" % ip
return "%s.xx网段下没有找到mac"