[Python] 如何得到特定interface的ip與mac address

只是把今天在stackoverflow上看到的範例改成自己能理解的形式。
至於ipv6 的 ip要怎麼拿?
那是另一個故事了
這裡有一段奮鬥的故事,但這是三年前的狀況。

剛才去翻了一下ifconfig的source code,
現在的做法,還有MacOSx的做法又都不一樣了,
不過我手邊的Python是2.6版,剛好都沒跟上,

所以在Python 2.6裡拿到ipv6 ip的方法,
我目前想得到最直觀的....
開個subprocess 摳 ifconfig然後parse output吧! XD
[更新]
Architect看到我的問題之後,

socket.getaddrinfo("www.python.org", 80, 0, 0, socket.IPPROTO_TCP)
就可以拿到了,
手邊剛好沒有ipv6的環境,測不出來.....
可是這樣不就一定得戳一ㄒㄧㄚ某個host了嗎?戳誰好咧?
import socket, fcntl, struct
def get_ip_and_mac(ifname):
#http://web.mit.edu/~linux/kernel/linux-2.1/linux-2.1.30/include/linux/sockios.h
SIOCGIFADDR = 0x8915
SIOCGIFHWADDR = 0x8927
op = struct.pack('256s', ifname[:15])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
addr = fcntl.ioctl(sock.fileno(), SIOCGIFADDR, op)
hwaddr = fcntl.ioctl(sock.fileno(), SIOCGIFHWADDR, op)
ip = socket.inet_ntoa(addr[20:24])
macaddr = ':'.join(['%02x' % ord(char) for char in hwaddr[18:24]])
return ip, macaddr
get_ip_and_mac('eth0')

留言