转自:http://blog.sina.com.cn/s/blog_896b31c701012x5a.html
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import fcntl
import struct
def get_ip_address(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
print "eth0 = "+ get_ip_address('eth0')
print "lo = " + get_ip_address('lo')
如果返回没有的网卡会出错
Traceback (most recent call last): File "getmac.py", line 17, in <module> print "eth1 = "+ get_ip_address('eth1') File "getmac.py", line 13, in get_ip_address struct.pack('256s', ifname[:15]) IOError: [Errno 99] Cannot assign requested address
第二种方法:
利用命令:
ip=`ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'`
mac=`ifconfig | grep HWaddr | awk -F" " '{print $5}'`
import os
tmptxt=" ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'"
IPTMP=os.popen(tmptxt).read()
IP=IPTMP.replace("\n","")
SIOCGIFHWADDR 和 0x8927是一个意思
/usr/include/linux/sockios.h 里有定义