暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python根据IP地址获取MAC地址 python设置IP地址、子网掩码、DNS,获取本机IP地址、子网掩码、DNS、MAC

捷创源科技 2022-03-03
2399

点击上方蓝字 ● 关注捷创源科技


1.python根据IP地址获取MAC地址(不能获取本机IP,可以获取与本机同局域网设备IP的MAC)

main.py

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    import os
    import platform
    import re




    class IP2MAC:
    """
    Python3根据IP地址获取MAC地址(不能获取本机IP,可以获取与本机同局域网设备IP的MAC)
    """
    def __init__(self):
    self.patt_mac = re.compile('([a-f0-9]{2}[-:]){5}[a-f0-9]{2}', re.I)


    def getMac(self, ip):
    sysstr = platform.system()


    if sysstr == 'Windows':
    macaddr = self.__forWin(ip)
    elif sysstr == 'Linux':
    macaddr = self.__forLinux(ip)
    else:
    macaddr = None


    return macaddr or '00-00-00-00-00-00'


    def __forWin(self, ip):
    os.popen('ping -n 1 -w 500 {} > nul'.format(ip))
    macaddr = os.popen('arp -a {}'.format(ip))
    macaddr = self.patt_mac.search(macaddr.read())


    if macaddr:
    macaddr = macaddr.group()
    else:
    macaddr = None


    return macaddr


    def __forLinux(self, ip):
    os.popen('ping -nq -c 1 -W 500 {} > dev/null'.format(ip))


    result = os.popen('arp -an {}'.format(ip))


    result = self.patt_mac.search(result.read())


    return result.group() if result else None




    if __name__ == '__main__':
    g = IP2MAC()


    print(g.getMac('192.168.2.105'))



    2.python设置本机IP地址、子网掩码、DNS,获取本机IP地址、子网掩码、DNS、MAC


    main.py

      """=== coding: UTF8 ==="""
      import uuid


      import wmi


      # IP地址
      arrIPAddresses = ['192.168.30.79']
      # 子网掩码
      arrSubnetMasks = ['255.255.255.0']
      # 默认网关
      arrDefaultGateways = ['192.168.30.1']
      arrGatewayCostMetrics = [1]
      # DNS列表
      arrDNS = ['114.114.114.114', '114.114.115.115']




      class InternetDef(object):
      intReboot = 0


      """初始化函数"""
      def __init__(self, arrIPAddressesServer, arrSubnetMasksServer,
      arrDefaultGatewaysServer, arrGatewayCostMetricsServer, arrDNSServers,
      wmiService, colNicConfigs, objNicConfig):
      self.arrIPAddressesServer = arrIPAddressesServer # 本机IP地址
      self.arrSubnetMasksServer = arrSubnetMasksServer # 子网掩码
      self.arrDefaultGatewaysServer = arrDefaultGatewaysServer # 默认网关
      self.arrGatewayCostMetricsServer = arrGatewayCostMetricsServer
      self.arrDNSServers = arrDNSServers
      self.wmiService = wmiService
      self.colNicConfigs = colNicConfigs
      self.objNicConfig = objNicConfig
      self.strMACAddress = "00-00-00-00-00-00" # 本机MAC地址


      """启动WMI服务函数"""
      def startWmiService(self):
      # 创建WMI服务对象
      self.wmiService = wmi.WMI()
      # 调用网络适配器配置
      self.colNicConfigs = self.wmiService.Win32_NetworkAdapterConfiguration(IPEnabled=True)


      if len(self.colNicConfigs) < 1:
      print("没有找到可用的网络适配器!")
      return False
      else:
      self.objNicConfig = self.colNicConfigs[0]
      return True


      """设置IP服务函数"""
      def setIPServers(self):
      returnValue = self.objNicConfig.EnableStatic(IPAddress=self.arrIPAddressesServer,
      SubnetMask=self.arrSubnetMasksServer)
      if returnValue[0] == 0:
      print("修改IP成功")
      elif returnValue[0] == 1:
      print("修改IP成功")
      InternetDef.intReboot += 1
      else:
      print("修改IP失败")
      exit()


      """设置默认网关服务函数"""
      def setGatewaysServer(self):
      returnValue = self.objNicConfig.SetGateways(DefaultIPGateway=self.arrDefaultGatewaysServer,
      GatewayCostMetric=self.arrGatewayCostMetricsServer)
      if returnValue[0] == 0:
      print("修改网关成功")
      elif returnValue[0] == 1:
      print("修改网关成功")
      InternetDef.intReboot += 1
      else:
      print("修改网关失败")
      exit()


      """设置DNS服务函数"""
      def setDNSServers(self):
      returnValue = self.objNicConfig.SetDNSServerSearchOrder(DNSServerSearchOrder=self.arrDNSServers)


      if returnValue[0] == 0:
      print("修改DNS成功")
      elif returnValue[0] == 1:
      print("修改DNS成功")
      InternetDef.intReboot += 1
      else:
      print("修改DNS失败")
      exit()


      """设置Internet服务函数"""
      def setInternetServer(self):
      if self.startWmiService(): # 启动WMI服务,如果返回True,则设置Internet
      self.setIPServers()
      self.setGatewaysServer()
      self.setDNSServers()
      else:
      exit()


      """获取IP信息函数"""
      def getIPInfo(self):
      print("本机IP:\n", self.objNicConfig.IPAddress[0])


      """获取子网掩码信息函数"""
      def getSubnetInfo(self):
      print("子网掩码:\n", self.objNicConfig.IPSubnet[0])


      """获取网关信息函数"""
      def getGatewaysInfo(self):
      print("默认网关:\n", self.objNicConfig.DefaultIPGateway[0])


      """获取DNS信息函数"""
      def getDNSInfo(self):
      print("本机DNS:\n" + '\n'.join(self.objNicConfig.DNSServerSearchOrder))


      """获取本机MAC函数"""
      def getMACAddress(self):
      mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
      strTempMac = ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
      self.strMACAddress = strTempMac.replace(':', '-').upper()
      print("本机MAC:\n", self.strMACAddress)


      """获取Internet所有信息函数"""
      def getInternetInfo(self):
      if InternetDef.intReboot > 0:
      print("需要重新启动计算机!")


      if self.startWmiService(): # 重新启动WMI服务,如果返回True,则获取internet信息
      self.getIPInfo()
      self.getSubnetInfo()
      self.getGatewaysInfo()
      self.getDNSInfo()
      self.getMACAddress()
      else:
      exit()




      """
      ========================================
      主函数功能测试
      ========================================
      """
      if __name__ == '__main__':
      # 定义internet对象
      internet1 = InternetDef(arrIPAddresses, arrSubnetMasks, arrDefaultGateways,
      arrGatewayCostMetrics, arrDNS, None, None, None)
      # 设置Internet
      internet1.setInternetServer()
      # 获取internet信息
      internet1.getInternetInfo()
      # Python程序运行结束后不关闭控制台命令
      input("\n请按任意键退出。。。")


      """
      # 定义internet对象
      internet2 = InternetDef([""], [""], [""], [1], ["", ""], None, None, None)
      # 获取internet信息
      internet2.getInternetInfo()
      # Python程序运行结束后不关闭控制台命令
      input("\n请按任意键退出。。。")
      """



      关注上面微信公众号“捷创源科技”,每天获取技术干货,让我们一起成长!


      文章转载自捷创源科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论