12 gennaio, 2007

Tip: Il mio ip da python

Come fare per ottenere l'indirizzo di una scheda di rete da un programma python? Una possibile risposta (funzionante solo su sistemi Unix purtroppo :( ) è la seguente:


import sys
import socket
import struct

# unix only
import fcntl

def getip(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 getip(sys.argv[1])

Questa funzione, dato il nome di una interfaccia (ed esempio eth0) , restituisce una stringa con l'ip assegnato a quella interfaccia.
Il problema è che il modulo fcntl che fornisce la funzione ioctl è disponibile solo su sistemi unix e quindi questo codice non è portabile su windows. A breve cercherò di proporre una soluzione portabile

2 commenti:

  1. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  2. Anonimo7:27 PM

    Basta fare:
    socket.getaddrinfo(socket.gethostname(), None)[0][4][0]

    RispondiElimina