Obtenha endereços IP em Python

Shivam Arora 30 janeiro 2023
  1. Use a função socket.gethostname() para obter o endereço IP local em Python
  2. Use a função socket.getsockname() para obter o endereço IP local em Python
  3. Use o módulo netifaces para obter o endereço IP local em Python
Obtenha endereços IP em Python

Os endereços IP são uma sequência de dígitos começando de 0.0.0.0 a 255.255.255.255, com cada número no intervalo de endereços de 0 a 255. Ele pode identificar exclusivamente um dispositivo em uma rede.

Neste artigo, obteremos os endereços IP locais usando Python.

Use a função socket.gethostname() para obter o endereço IP local em Python

Podemos usar o módulo socket em Python para criar conexões de rede e enviar mensagens pela rede.

A função gethostname() retorna o nome do host do sistema sob o qual o Python está sendo executado.

Por exemplo,

import socket

print(socket.gethostbyname(socket.gethostname()))

Resultado:

192.168.0.118

Use a função socket.getsockname() para obter o endereço IP local em Python

Se o dispositivo do computador tiver uma rota conectada à Internet, podemos usar a função getsockname(). Ele retorna o endereço IP e a porta na forma de uma tupla.

Veja o código abaixo.

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])

Resultado:

192.168.0.112

Este método retorna o IP primário da máquina local, ou seja, a rota padrão.

Também podemos usar essa função para criar uma função definida pelo usuário que não precisa de nenhum acesso à Internet roteável.

Veja o código abaixo.

import socket


def extract_ip():
    st = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        st.connect(("10.255.255.255", 1))
        IP = st.getsockname()[0]
    except Exception:
        IP = "127.0.0.1"
    finally:
        st.close()
    return IP


print(extract_ip())

Resultado:

192.168.0.112

O método acima funciona em todas as interfaces. Também funciona com todos os IPs públicos, privados e externos. Este método é eficiente em Linux, Windows e OSX.

Use o módulo netifaces para obter o endereço IP local em Python

O módulo netifaces é usado para fornecer informações sobre as interfaces de rede e seu status.

Podemos usá-lo para obter o endereço IP da máquina local, conforme mostrado abaixo.

from netifaces import interfaces, ifaddresses, AF_INET

for ifaceName in interfaces():
    addresses = [
        i["addr"]
        for i in ifaddresses(ifaceName).setdefault(AF_INET, [{"addr": "No IP addr"}])
    ]
    print(" ".join(addresses))

Resultado:

No IP addr
No IP addr
No IP addr
No IP addr
192.168.0.104
127.0.0.1

Artigo relacionado - Python Network