2010-09-20 35 views
3

我試圖讓我的IP子網地址(192.168.1.xxx)進入我的Python代碼。我正在運行linux/osx。我該怎麼做/做這件事的最好方法是什麼?試圖在我的Python代碼中使用我的子網地址

+2

[在Python中查找本地IP地址。](http://stackoverflow.com/questions/166506/finding-local-ip-addresses-in-python) – Mark 2010-09-20 22:12:04

回答

8

對這個在我的經驗,最簡單的方法是使用兩個第三方軟件包:

所以安裝這些模塊,然後它的,因爲這很容易:

import netifaces 
import netaddr 
import socket 
from pprint import pformat 

ifaces = netifaces.interfaces() 
# => ['lo', 'eth0', 'eth1'] 

myiface = 'eth0' 
addrs = netifaces.ifaddresses(myiface) 
# {2: [{'addr': '192.168.1.150', 
#    'broadcast': '192.168.1.255', 
#    'netmask': '255.255.255.0'}], 
# 10: [{'addr': 'fe80::21a:4bff:fe54:a246%eth0', 
#    'netmask': 'ffff:ffff:ffff:ffff::'}], 
# 17: [{'addr': '00:1a:4b:54:a2:46', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]} 

# Get ipv4 stuff 
ipinfo = addrs[socket.AF_INET][0] 
address = ipinfo['addr'] 
netmask = ipinfo['netmask'] 

# Create ip object and get 
cidr = netaddr.IPNetwork('%s/%s' % (address, netmask)) 
# => IPNetwork('192.168.1.150/24') 
network = cidr.network 
# => IPAddress('192.168.1.0') 

print 'Network info for %s:' % myiface 
print '--' 
print 'address:', address 
print 'netmask:', netmask 
print ' cidr:', cidr 
print 'network:', network 

而這種輸出:

Network info for eth0: 
-- 
address: 192.168.1.150 
netmask: 255.255.255.0 
    cidr: 192.168.1.150/24 
network: 192.168.1.0 

這是使用Linux來完成。使用OSX時,接口名稱不同,但方法相同。

+0

這是錯誤的'ipinfo = addrs [socket.AF_INET] [0]'我做錯了什麼? – ocoutts 2010-09-21 18:24:57

+0

可能。什麼是錯誤?你記得'導入套接字'嗎? – jathanism 2010-09-21 19:13:20

+0

啊,這正是我想要的。 netaddr文檔不顯示netaddr.IPNetwork('%s /%s'%(address,netmask))構造函數簽名。 – crempp 2014-05-07 00:49:35

相關問題