基本方法 Python获取本地IP地址通过importsocketIP=socket.gethostbyname(socket.gethostname()) 通过gethostname获取主机名,然后使用gethostbyname将主机名转换为IP地址。 那么,问题来了。如果主机有多个网卡/IP,如何获取指定的IP地址? 一种方法是通过socket.gethostbyname_ex获取主机IP地址列表,然后遍历列表获取自己需要的IP。importsocketdefGetLocalIPByPrefix(prefix):r"""多网卡情况下,根据前缀获取IP(Windows下适用)"""localIP=''foripinsocket.gethostbyname_ex(socket.gethostname())[2]:ifip.startswith(prefix):localIP=ipreturnlocalIPprint(GetLocalIPByPrefix('192.168')) 更简单的方法(不需要修改代码,或者使用socket.gethostname函数),就是改IP优先级通过配置hosts文件。 以上方法只支持IPv4,如果想获取IPv6信息,请参考socket.getaddrinfo。获取MAC地址使用系统库获取单机的mac地址。importuuiddefGetMAC():r"""forsinglenetworkcard"""addr=hex(uuid.getnode())[2:].upper()return'-'.join(addr[i:i+2]foriinrange(0,len(addr),2))使用第三方库psutil打印网卡信息。importpsutildefPrintNetIfAddr():r"""打印多网卡mac和ip信息"""dic=psutil.net_if_addrs()foradapterindic:snicList=dic[adapter]mac='nomacaddress'ipv4='snicList中的snic没有ipv4地址'ipv6='没有ipv6地址':ipv4=snic.addresselifsnic.family.name=='AF_INET6':ipv6=snic.addressprint('%s,%s,%s,%s'%(adapter,mac,ipv4,ipv6))交叉-platformbasis通过前缀获取ip的方法importpsutildefGetLocalIPByPrefix(prefix):r"""多网卡情况下,根据前缀获取IP可用测试:Windows,Linux,Python3.6.x,psutil5.4.xipv4/ipv6地址适用注意如果有多个具有相同前缀的IP,只随机返回一个"""localIP=''dic=psutil.net_if_addrs()foradapterindic:snicList=dic[adapter]forsnicinsnicList:如果不是snic.family.name.startswith('AF_INET'):continueip=snic.addressifip.startswith(prefix):localIP=ipreturnlocalIPprint(GetLocalIPByPrefix('192.168'))本文出自walkersnapshot
