2016-10-11 44 views

回答

0

netifaces包提供了一種獲取網絡接口和地址信息的平臺無關的方式。 ipaddress包(Python3標準,Python2外部包)提供了一個方便的is_loopback方法。

這不完全微不足道的,但這裏是一些代碼,爲我工作至少一次:

import netifaces 
import ipaddress 
from pprint import pprint 


def get_local_non_loopback_ipv4_addresses(): 
    for interface in netifaces.interfaces(): 
     # Not all interfaces have an IPv4 address: 
     if netifaces.AF_INET in netifaces.ifaddresses(interface): 
      # Some interfaces have multiple IPv4 addresses: 
      for address_info in netifaces.ifaddresses(interface)[netifaces.AF_INET]: 
       address_object = ipaddress.IPv4Address(unicode(address_info['addr'], 'utf-8')) 
       if not address_object.is_loopback: 
        yield address_info['addr'] 

pprint(list(get_local_non_loopback_ipv4_addresses())) 

address_info變量也將有netmaskbroadcast鍵,您可以訪問更多的信息。

IPv4Address對象還有is_privateis_global您可以用於類似查詢的方法。