只是把今天在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了嗎?戳誰好咧?
至於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了嗎?戳誰好咧?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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') |
留言
張貼留言