ただし ifconfig コマンドや ip コマンドの出力をパースするのはナシの方向で。
Linux だと ioctl(SIOCGIFADDR) で取れるそうです。
ほぼネタ元 (下記参考 1) のスクリプトそのままです。
Python だとディストリビューション付属の状態でここまで書けるので楽ですね。
import sys, socket, struct
from fcntl import ioctl
SIOCGIFADDR = 0x8915
if len(sys.argv) < 2:
print >> sys.stderr, "Usage:", sys.argv[0], "<interface name>"
sys.exit()
interface = sys.argv[1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
ifreq = struct.pack('16s16x', interface)
ifaddr = ioctl(s.fileno(), SIOCGIFADDR, ifreq)
finally:
s.close()
_, sa_family, port, in_addr = struct.unpack('16sHH4s8x', ifaddr)
print socket.inet_ntoa(in_addr)