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"